{
  "version": 1,
  "entries": [
    {
      "route": "/api",
      "type": "guide",
      "title": "Introduction",
      "description": "Overview of the Payroc API, covering merchant boarding, funding accounts, transaction processing, and core features such as idempotency, metadata, pagination, and versioning.",
      "headings": [],
      "plainText": "Use our API explorer to view a detailed breakdown of our API and to discover how you can integrate with it to do the following: Board merchants - Add merchants to your organization and set up their accounts. Manage funding accounts - Move funds to your merchants and other organizations. Run transactions - Take payments from customers using a range of payment methods. Our API supports the following features: Idempotency Metadata Pagination Versioning We also provide easy-to-use guides that contain all the information you need to integrate with the key functions of our API.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/api/account-update",
      "type": "reference",
      "title": "Update account details",
      "description": "POST /processing-terminals/{processingTerminalId}/secure-tokens/{secureTokenId}/update-account",
      "headings": [],
      "plainText": "Use this method to update a secure token if you have a single-use token from Hosted Fields. Note: If you don't have a single-use token, you can update saved payment details with our Update Secure Token method. For more information about our two options to update a secure token, go to Update saved payment details .",
      "refs": {
        "workflowIds": [
          "refresh-a-saved-payment-method"
        ],
        "operationIds": [
          "accountUpdate"
        ]
      }
    },
    {
      "route": "/api/adjust-payment",
      "type": "reference",
      "title": "Adjust payment",
      "description": "POST /payments/{paymentId}/adjust",
      "headings": [],
      "plainText": "Use this method to adjust a payment in an open batch. To adjust a payment, you need its paymentId. Our gateway returned the paymentId in the response of the Create Payment method. Note: If you don't have the paymentId, use our List Payments method to search for the payment. You can adjust the following details of the payment: Sale amount and tip amount Payment status Cardholder shipping address and contact information Cardholder signature data Our gateway returns information about the adjusted payment, including information about the payment card and the cardholder.",
      "refs": {
        "workflowIds": [
          "adjust-a-payment",
          "run-a-pre-authorization"
        ],
        "operationIds": [
          "adjustPayment"
        ]
      }
    },
    {
      "route": "/api/adjust-refund",
      "type": "reference",
      "title": "Adjust refund",
      "description": "POST /refunds/{refundId}/adjust",
      "headings": [],
      "plainText": "Use this method to adjust a refund in an open batch. To adjust a refund, you need its refundId. Our gateway returned the refundId in the response of the Refund Payment method or the Create Refund method. Note: If you don’t have the refundId, use our List Refunds method to search for the refund. You can adjust the following details of the refund: Customer details, including shipping address and contact information. Status of the refund. Our gateway returns information about the adjusted refund, including: Order details, including the refund amount and when we processed the refund. Payment card details, including the masked card number, expiry date, and payment method. Cardholder details, including their contact information and shipping address. If the refund is a referenced refund, our gateway also returns details about the payment that the refund is linked to.",
      "refs": {
        "workflowIds": [
          "adjust-a-refund"
        ],
        "operationIds": [
          "adjustRefund"
        ]
      }
    },
    {
      "route": "/api/apple-pay-sessions",
      "type": "reference",
      "title": "Start Apple Pay session",
      "description": "POST /processing-terminals/{processingTerminalId}/apple-pay-sessions",
      "headings": [],
      "plainText": "Use this method to start an Apple Pay session for your merchant. In the response, we return the startSessionObject that you send to Apple when you retrieve the cardholder's encrypted payment details. Note: For more information about how to integrate with Apple Pay, go to Apple Pay .",
      "refs": {
        "workflowIds": [
          "accept-apple-pay"
        ],
        "operationIds": [
          "applePaySessions"
        ]
      }
    },
    {
      "route": "/api/authentication",
      "type": "guide",
      "title": "Authentication",
      "description": "How to authenticate Payroc API requests using API keys and Bearer tokens, including Identity Service endpoints, required request headers, and API key best practices.",
      "headings": [
        "Request",
        "Example request",
        "Response",
        "Example response",
        "Request headers",
        "API key best practices"
      ],
      "plainText": "The Payroc API uses Bearer tokens to authenticate requests. Use our Identity Service to generate a Bearer token, and then send the token in the header of your requests to our API. Each Bearer token expires after one hour, and you must generate a new Bearer token before the previous one expires. Request Important: Use HTTPS for all requests to the Payroc API. We reject all HTTP requests, and all requests that are not properly authenticated. To generate a Bearer token, include your API key in the x-api-key parameter in the header of a POST request to the Identity Service endpoint. Note: API keys are specific to each environment, for example, you can't use your UAT API key with the Production endpoint. Endpoint Prefix URL Test identity.uat. https://identity.uat.payroc.com/authorize Production identity. https://identity.payroc.com/authorize Example request curl --location --request POST 'https://identity.payroc.com/authorize' --header 'x-api-key: <api key>' Response If your request is successful, we generate a Bearer token and return it in the access_token field in the response. The response contains the following fields: Field Description access_token Bearer token that you include in follow-up requests to our API. expires_in Expiration time of the token in seconds. The value is 3600. scope Indicates the resources you can send requests to with the Bearer token. token_type Indicates the type of the token. Example response { \"access_token\": \"eyJhbGc....adQssw5c\", \"expires_in\": 3600, \"scope\": \"service_a service_b\", \"token_type\": \"Bearer\" } Request headers Include the following headers in each request to the Payroc API: Content-Type: Include application/json. Authorization: Include your Bearer token . Idempotency-Key: Include a UUID v4 to make POST and PATCH requests idempotent . curl -H \"Content-Type: application/json\" -H \"Authorization: Bearer <access token>\" -H \"Idempotency-Key: <UUID v4>\" Note: Some endpoints require a different value for Content-Type. Check the individ",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/api/balance-card",
      "type": "reference",
      "title": "View EBT balance",
      "description": "POST /cards/balance",
      "headings": [],
      "plainText": "Use this method to view the balance of an Electronic Benefit Transfer (EBT) card. If the request is successful, our gateway returns the current balance of an EBT card.",
      "refs": {
        "workflowIds": [
          "check-ebt-balance"
        ],
        "operationIds": [
          "balanceCard"
        ]
      }
    },
    {
      "route": "/api/bank-transfer-payment",
      "type": "reference",
      "title": "Create payment",
      "description": "POST /bank-transfer-payments",
      "headings": [],
      "plainText": "Use this method to run a sale with a customer's bank account details. In the response, our gateway returns information about the bank transfer payment and a paymentId, which you need for the following methods: Retrieve payment - View the details of the bank transfer payment. Reverse payment - Cancel the bank transfer payment if it's an open batch. Refund payment - Run a referenced refund to return funds to the customer's bank account. Payment methods Our gateway accepts the following payment methods: Automated clearing house (ACH) details Pre-authorized debit (PAD) details You can also use secure tokens and single-use tokens that you created from ACH details or PAD details.",
      "refs": {
        "workflowIds": [
          "run-a-bank-transfer-sale"
        ],
        "operationIds": [
          "bankTransferPayment"
        ]
      }
    },
    {
      "route": "/api/bank-transfer-unreferenced-refund",
      "type": "reference",
      "title": "Create unreferenced refund",
      "description": "POST /bank-transfer-refunds",
      "headings": [],
      "plainText": "Use this method to create an unreferenced refund. An unreferenced refund is a refund that isn’t linked to a bank transfer payment. Note: If you have the paymentId of the payment you want to refund, use our Refund Payment method. If you use our Refund Payment method, our gateway sends the refund amount to the customer’s original payment method and links the refund to the payment. In the request, you must provide the customer’s payment method and information about the order including the refund amount. In the response, our gateway returns information about the refund and a refundId, which you need for the following methods: Retrieve refund – View the details of the refund. Reverse refund – Cancel the refund if it’s in an open batch.",
      "refs": {
        "workflowIds": [
          "run-unreferenced-bank-transfer-refund"
        ],
        "operationIds": [
          "bankTransferUnreferencedRefund"
        ]
      }
    },
    {
      "route": "/api/bin-lookup",
      "type": "reference",
      "title": "Look up BIN information",
      "description": "POST /cards/bin-lookup",
      "headings": [],
      "plainText": "Use this method to retrieve information about a debit card, a credit card, or an EBT card. If you apply surcharges to transactions, you can also check if the card supports surcharging. In the response, our gateway returns the following information about the card: Card details - Information about the card, for example, the issuing bank and the masked card number. Surcharging information - If you apply a surcharge to transactions, our gateway checks that the card supports surcharging and returns information about the surcharge. For more information about surcharging, go to Credit card surcharging .",
      "refs": {
        "workflowIds": [
          "look-up-bin"
        ],
        "operationIds": [
          "binLookup"
        ]
      }
    },
    {
      "route": "/api/capture-payment",
      "type": "reference",
      "title": "Capture payment",
      "description": "POST /payments/{paymentId}/capture",
      "headings": [],
      "plainText": "Use this method to capture a pre-authorization. To capture a pre-authorization, you need its paymentId. Our gateway returned the paymentId in the response of the Create Payment method. Note: If you don't have the paymentId, use our List Payments method to search for the payment. Depending on the amount you want to capture, complete the following: Capture the full amount of the pre-authorization - Don't send a value for the amount parameter in your request. Capture less than the amount of the pre-authorization - Send a value for the amount parameter in your request. Capture more than the amount of the pre-authorization - Adjust the pre-authorization before you capture it. For more information about adjusting a pre-authorization, go to Adjust Payment . If your request is successful, our gateway takes the amount from the payment card. Note: For more information about pre-authorizations and captures, go to Run a pre-authorization .",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-payment-page",
          "run-a-pre-authorization"
        ],
        "operationIds": [
          "capturePayment"
        ]
      }
    },
    {
      "route": "/api/close-bank-transfer-payment",
      "type": "reference",
      "title": "Close return",
      "description": "POST /bank-transfer-payments/{paymentId}/close",
      "headings": [],
      "plainText": "Use this method to close a return if the customer used an alternative payment method to resolve a returned payment. To close a return, you need the paymentId of the return. To get the paymentId of the return, complete the following steps: Use our Retrieve Payment method to view the details of the original payment. From the returns object in the response, get the paymentId of the return. If your request is successful, our gateway closes the return.",
      "refs": {
        "workflowIds": [
          "close-ach-return"
        ],
        "operationIds": [
          "closeBankTransferPayment"
        ]
      }
    },
    {
      "route": "/api/close-batch",
      "type": "reference",
      "title": "Close batch for processing terminal",
      "description": "POST /processing-terminals/{processingTerminalId}/close-batch",
      "headings": [],
      "plainText": "Use this method to manually close a batch on a processing terminal. Our gateway returns a cut-off time that indicates when our gateway closes the batch. Note: After our gateway closes the batch, the merchant can use the Self-Care Portal to view the details of the batch.",
      "refs": {
        "workflowIds": [
          "close-a-terminal-batch"
        ],
        "operationIds": [
          "closeBatch"
        ]
      }
    },
    {
      "route": "/api/create-event-subscription",
      "type": "reference",
      "title": "Create event subscription",
      "description": "POST /event-subscriptions",
      "headings": [],
      "plainText": "Use this method to create an event subscription that we use to notify you when an event occurs, for example, when we change the status of a processing account. In the request, include the events that you want to subscribe to and the public endpoint that we send event notifications to. For a complete list of events that you can subscribe to, go to Events List . In the response, our gateway returns the id of the event subscription, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "create-event-subscription"
        ],
        "operationIds": [
          "createEventSubscription"
        ]
      }
    },
    {
      "route": "/api/create-fund-recipient-funding-account",
      "type": "reference",
      "title": "Create funding account",
      "description": "POST /funding-recipients/{recipientId}/funding-accounts",
      "headings": [],
      "plainText": "Use this method to create a funding account and add it to a funding recipient. To add a funding account to a funding recipient, you need the recipientId. Our gateway returned the recipientId in the response of the Create Funding Recipient method. Note: If you don't have the recipientId, use our List Funding Recipients method to search for the funding recipient. In the request, include the following information: Account type, for example, if the account is a checking or savings account. Account holder's name. ACH information, including the routing number and account number of the account. Our gateway returns the fundingAccountId, which you can use to run follow-on actions.",
      "refs": {
        "workflowIds": [
          "set-up-a-funding-recipient"
        ],
        "operationIds": [
          "createFundRecipientFundingAccount"
        ]
      }
    },
    {
      "route": "/api/create-fund-recipient-owner",
      "type": "reference",
      "title": "Create funding recipient owner",
      "description": "POST /funding-recipients/{recipientId}/owners",
      "headings": [],
      "plainText": "Use this method to add an additional owner to a funding recipient. To add an owner to a funding recipient, you need the recipientId. Our gateway returned the recipientId in the response of the Create Funding Recipient method. Note: If you don't have the recipientId, use our List Funding Recipients method to search for the funding recipient. In the request, include the following information about the owner: Name, date of birth, and address. Contact details, including their email address. Relationship to the funding recipient, including whether they are a control prong. In the response, our gateway returns the ownerId, which you can use to run follow-on actions.",
      "refs": {
        "workflowIds": [
          "set-up-a-funding-recipient"
        ],
        "operationIds": [
          "createFundRecipientOwner"
        ]
      }
    },
    {
      "route": "/api/create-funding-recipient",
      "type": "reference",
      "title": "Create funding recipient",
      "description": "POST /funding-recipients",
      "headings": [],
      "plainText": "Use this method to create a funding recipient. A funding recipient is a business or organization that can receive funds but can't run transactions, for example, a charity. In the request, include the following information: Legal information, including its tax ID, Doing Business As (DBA) name, and address. Contact information, including the email address. Owners' details, including their contact details. Funding account details. Our gateway returns the recipientId of the funding recipient, which you can use to run follow-on actions.",
      "refs": {
        "workflowIds": [
          "set-up-a-funding-recipient"
        ],
        "operationIds": [
          "createFundingRecipient"
        ]
      }
    },
    {
      "route": "/api/create-instruction",
      "type": "reference",
      "title": "Create funding instruction",
      "description": "POST /funding-instructions",
      "headings": [],
      "plainText": "Use this method to create a funding instruction that tells us how to distribute the funds from your merchants' transactions. Note: Before you create a funding instruction, you can use our List Funding Balances method to view the amount of available funds that a merchant has. In your request, include an array of merchantInstruction objects. Each merchantInstruction object contains the following: Merchant ID (MID) of the merchant whose funding balance you want to distribute. Funding account that you want to send funds to. Amount that you want to send to the funding account. Our gateway returns the instructionId, which you can use to run follow-on actions.",
      "refs": {
        "workflowIds": [
          "send-funds-to-a-merchant"
        ],
        "operationIds": [
          "createInstruction"
        ]
      }
    },
    {
      "route": "/api/create-merchant",
      "type": "reference",
      "title": "Create merchant platform",
      "description": "POST /merchant-platforms",
      "headings": [],
      "plainText": "Use this method to board a merchant with Payroc. Note : This method is part of our Boarding solution. To help you understand how this method works with other Boarding methods, go to Board a Merchant . In the request, include the following information: Legal information, including its legal name and address. Contact information, including the email address for the business. Processing account information, including the pricing model, owners, and contacts for the processing account. When you send a successful request, we review the merchant's information. After we complete our review and approve the merchant, we assign: merchantPlatformId - Unique identifier for the merchant platform. processingAccountId - Unique identifier for each processing account linked to the merchant platform. You need to keep these to perform follow-on actions, for example, you need the processingAccountId to order terminals for the processing account.",
      "refs": {
        "workflowIds": [
          "create-merchant-platform"
        ],
        "operationIds": [
          "createMerchant"
        ]
      }
    },
    {
      "route": "/api/create-payment-link",
      "type": "reference",
      "title": "Create payment link",
      "description": "POST /processing-terminals/{processingTerminalId}/payment-links",
      "headings": [],
      "plainText": "Use this method to create a payment link that a customer can use to make a payment for goods or services. The request includes the following settings: type - Indicates whether the link can be used only once or if it can be used multiple times. authType - Indicates whether the transaction is a sale or a pre-authorization. paymentMethod - Indicates the payment methods that the merchant accepts. charge - Indicates whether the merchant or the customer enters the amount for the transaction. If your request is successful, our gateway returns a paymentLinkId, which you can use to perform follow-on actions. Note: To share the payment link with a customer, use our Share Payment Link method.",
      "refs": {
        "workflowIds": [
          "collect-with-payment-link"
        ],
        "operationIds": [
          "createPaymentLink"
        ]
      }
    },
    {
      "route": "/api/create-payment-plan",
      "type": "reference",
      "title": "Create payment plan",
      "description": "POST /processing-terminals/{processingTerminalId}/payment-plans",
      "headings": [],
      "plainText": "Use this method to create a payment schedule that you can assign customers to. Note: This method is part of our Repeat Payments feature. To help you understand how this method works with our Subscriptions endpoints, go to Repeat Payments . When you create a payment plan you need to provide a unique paymentPlanId that you use to run follow-on actions: Retrieve Payment Plan - View the details of the payment plan. Update Payment Plan - Update the details of the payment plan. Delete Payment Plan - Delete the payment plan. Create Subscription - Subscribe a customer to the payment plan. The request includes the following settings: type - Indicates if our gateway or the merchant collects payments. If the merchant manually collects payments, integrate with the Pay Manual Subscription method. recurringOrder - Amount of each payment if the gateway automatically collect payments. setupOrder - Setup fee that our gateway immediately collects from the customer's payment method. onUpdate and onDelete - Indicates what happens to associated subscriptions if the merchant updates or deletes the payment plan.",
      "refs": {
        "workflowIds": [
          "manage-payment-plans"
        ],
        "operationIds": [
          "createPaymentPlan"
        ]
      }
    },
    {
      "route": "/api/create-pricing-intent",
      "type": "reference",
      "title": "Create pricing intent",
      "description": "POST /pricing-intents",
      "headings": [],
      "plainText": "Use this method to create a pricing intent that you can assign to a processing account. In the request, you must provide the following: Processing fees, including the pricing program and the fee to process each transaction. Gateway fees, including the fee for each transaction handled by our gateway. Base fees, including maintenance and PCI fees. In the response, our gateway returns information about the pricing intent and the pricingIntentId, which you need for the following methods: Create Merchant Platform - Assign the pricing intent to a processing account, when you create the merchant platform and its processing accounts. Create Processing Account - Assign the pricing intent to a processing account. Retrieve Pricing Intent - Retrieve information about a pricing intent. Update Pricing Intent - Update the details of a pricing intent. Delete Pricing Intent - Delete a pricing intent. Partially Update Pricing Intent - Partially update the details of a pricing intent.",
      "refs": {
        "workflowIds": [
          "create-pricing-intent",
          "manage-pricing-intents"
        ],
        "operationIds": [
          "createPricingIntent"
        ]
      }
    },
    {
      "route": "/api/create-processing-account",
      "type": "reference",
      "title": "Create processing account",
      "description": "POST /merchant-platforms/{merchantPlatformId}/processing-accounts",
      "headings": [],
      "plainText": "Use this method to add an additional processing account to a merchant platform. To add a processing account to a merchant platform, you need the merchantPlatformId. Our gateway returned the merchantPlatformId in the response of the Create Merchant Platform method. Note : If you don't have the merchantPlatformId, use our List Merchant Platforms method to search for the merchant platform. In the request, include the following information: Business details, including its business type, time zone, and address. Owners' details, including their contact details. Funding, pricing, and processing information, including its pricing model and funding accounts. Additional forms that you need us to send to the merchant, for example, attestations and questionnaires. When you send a successful request, we review the information about the processing account. After we complete our review and approve the processing account, we assign a processingAccountId, which you need to perform follow-on actions. Note : You can subscribe to our processingAccount.status.changed event to get notifications when we update the status of a processing account. For more information about how to subscribe to events, go to Events List .",
      "refs": {
        "workflowIds": [
          "add-processing-account"
        ],
        "operationIds": [
          "createProcessingAccount"
        ]
      }
    },
    {
      "route": "/api/create-processing-account-attachment",
      "type": "reference",
      "title": "Upload attachment to processing account",
      "description": "POST /processing-accounts/{processingAccountId}/attachments",
      "headings": [],
      "plainText": "Before you upload an attachment, make sure that you follow local privacy regulations and get the merchant's consent to process their information. Note: You need the ID of the processing account before you can upload an attachment. If you don't know the processingAccountId, go to the Retrieve a Merchant Platform method. The attachment must be an uncompressed file under 50MB in one of the following formats: .bmp, csv, .doc, .docx, .gif, .htm, .html, .jpg, .jpeg, .msg, .pdf, .png, .ppt, .pptx, .tif, .tiff, .txt, .xls, .xlsx In the request, include the attachment that you want to upload and the following information about the attachment: type - Type of attachment that you want to upload. description - Short description of the attachment. In the response, our gateway returns information about the attachment including its upload status and an attachmentId that you can use to Retrieve the details of the Attachment .",
      "refs": {
        "workflowIds": [
          "add-attachment"
        ],
        "operationIds": [
          "createProcessingAccountAttachment"
        ]
      }
    },
    {
      "route": "/api/create-reminder",
      "type": "reference",
      "title": "Create reminder for processing account",
      "description": "POST /processing-accounts/{processingAccountId}/reminders",
      "headings": [],
      "plainText": "Use this method to prompt a merchant to sign their pricing agreement. You can create a reminder only if you requested the merchant’s signature by email when you created the processing account for the merchant. To create a reminder, you need the processingAccountId. Our gateway returned the processingAccountId in the response of the Create Merchant Platform method or Create Processing Account method. Note: If you don’t know the processingAccountId, use our List Merchant Platform’s Processing Accounts method to search for the processing account. When you send a successful request, we send an email to the merchant that prompts them to sign their pricing agreement.",
      "refs": {
        "workflowIds": [
          "add-processing-account",
          "create-merchant-platform"
        ],
        "operationIds": [
          "createReminder"
        ]
      }
    },
    {
      "route": "/api/create-secure-token",
      "type": "reference",
      "title": "Create secure token",
      "description": "POST /processing-terminals/{processingTerminalId}/secure-tokens",
      "headings": [],
      "plainText": "Use this method to create a secure token that represents a customer's payment details. When you create a secure token, you need to generate and provide a secureTokenId that you use to run follow-on actions: Retrieve Secure Token – View the details of the secure token. Delete Secure Token – Delete the secure token. Update Secure Token – Update the details of the secure token. Update Account Details – Update the secure token with the details from a single-use token. Note: If you don't generate a secureTokenId to identify the token, our gateway generates a unique identifier and returns it in the response. If the request is successful, our gateway returns a token that the merchant can use in transactions instead of the customer's sensitive payment details, for example, when they run a sale .",
      "refs": {
        "workflowIds": [
          "save-a-card-with-hosted-fields",
          "save-a-payment-method"
        ],
        "operationIds": [
          "createSecureToken"
        ]
      }
    },
    {
      "route": "/api/create-session",
      "type": "reference",
      "title": "Create Hosted Fields session",
      "description": "POST /processing-terminals/{processingTerminalId}/hosted-fields-sessions",
      "headings": [],
      "plainText": "Use this method to create a Hosted Fields session token. You need to generate a new session token each time you load Hosted Fields on a webpage. In your request, you need to indicate whether the merchant is using Hosted Fields to run a sale, save payment details, or update saved payment details. In the response, our gateway returns the session token and the time that it expires. You need the session token when you configure the JavaScript for Hosted Fields. For more information about adding Hosted Fields to a webpage, go to Hosted Fields .",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-fields",
          "save-a-card-with-hosted-fields"
        ],
        "operationIds": [
          "createSession"
        ]
      }
    },
    {
      "route": "/api/create-single-use-token",
      "type": "reference",
      "title": "Create single use token",
      "description": "POST /processing-terminals/{processingTerminalId}/single-use-tokens",
      "headings": [],
      "plainText": "Use this method to create a single-use token that represents a customer’s payment details. A single-use token expires after 30 minutes and merchants can use them only once. Note: To create a reusable permanent token, go to Create Secure Token . In the request, send the customer’s payment details. If the request is successful, our gateway returns a token that you can use in a follow-on action, for example, run a sale .",
      "refs": {
        "workflowIds": [
          "pay-with-single-use-token"
        ],
        "operationIds": [
          "createSingleUseToken"
        ]
      }
    },
    {
      "route": "/api/create-subscription",
      "type": "reference",
      "title": "Create subscription",
      "description": "POST /processing-terminals/{processingTerminalId}/subscriptions",
      "headings": [],
      "plainText": "Use this method to assign a customer to a payment plan. Note: This method is part of our Repeat Payments feature. To help you understand how this method works with our Payment plans endpoints, go to Repeat Payments . When you create a subscription you need to provide a unique subscriptionId that you use to run follow-on actions: Retrieve Subscription - View the details of the subscription. Update Subscription - Update the details of the subscription. Deactivate Subscription - Stop taking payments for the subscription. Re-activate Subscription - Start taking payments again for the subscription. Pay Manual Subscription - Manually collect a payment for the subscription. The request includes the following settings: paymentPlanId - Unique identifier of the payment plan that the merchant wants to use. If you don't have the paymentPlanId, use our List Payment Plans method to search for the payment plan. paymentMethod - Object that contains information about the secure token, which represents the customer's card details or bank account details. startDate - Date that you want to start to take payments. You can also update the settings that the subscription inherited from the payment plan, for example, you can change the amount for each payment. If you change the settings for the subscription, it doesn't change the settings in the payment plan that it's linked to.",
      "refs": {
        "workflowIds": [
          "manage-subscriptions"
        ],
        "operationIds": [
          "createSubscription"
        ]
      }
    },
    {
      "route": "/api/create-terminal-order",
      "type": "reference",
      "title": "Create terminal order",
      "description": "POST /processing-accounts/{processingAccountId}/terminal-orders",
      "headings": [],
      "plainText": "Use this method to order and configure terminals for a processing account. Note : You need the ID of the processing account before you can create an order. If you don't know the processingAccountId, go to the Retrieve a Merchant Platform method. In the request, specify the gateway settings, device settings, and application settings for the terminal. In the response, our gateway returns information about the terminal order including its status and terminalOrderId that you can use to retrieve the terminal order . Note : You can subscribe to the terminalOrder.status.changed event to get notifications when we update the status of a terminal order. For more information about how to subscribe to events, go to Events Subscriptions .",
      "refs": {
        "workflowIds": [
          "order-a-terminal"
        ],
        "operationIds": [
          "createTerminalOrder"
        ]
      }
    },
    {
      "route": "/api/deactivate-payment-link",
      "type": "reference",
      "title": "Deactivate payment link",
      "description": "POST /payment-links/{paymentLinkId}/deactivate",
      "headings": [],
      "plainText": "Use this method to deactivate a payment link. To deactivate a payment link, you need its paymentLinkId. Our gateway returned the paymentLinkId in the response of the Create Payment Link method. Note: If you don't have the paymentLinkId, use our List Payment Links method to search for the payment link. If your request is successful, our gateway deactivates the payment link. The customer can't use the link to make a payment, and you can't reactivate the payment link.",
      "refs": {
        "workflowIds": [
          "collect-with-payment-link"
        ],
        "operationIds": [
          "deactivatePaymentLink"
        ]
      }
    },
    {
      "route": "/api/deactivate-subscription",
      "type": "reference",
      "title": "Deactivate subscription",
      "description": "POST /processing-terminals/{processingTerminalId}/subscriptions/{subscriptionId}/deactivate",
      "headings": [],
      "plainText": "Use this method to deactivate a subscription. To deactivate a subscription, you need its subscriptionId, which you sent in the request of the Create Subscription method. Note: If you don't have the subscriptionId, use our List Subscriptions method to search for the subscription. If your request is successful, our gateway stops taking payments from the customer. To reactivate the subscription, use our Reactivate Subscription method.",
      "refs": {
        "workflowIds": [
          "deactivate-a-subscription"
        ],
        "operationIds": [
          "deactivateSubscription"
        ]
      }
    },
    {
      "route": "/api/delete-contact",
      "type": "reference",
      "title": "Delete contact",
      "description": "DELETE /contacts/{contactId}",
      "headings": [],
      "plainText": "Use this method to delete a contact associated with a processing account. To delete a contact, you need their contactId. Our gateway returned the contactId in the response of the Create Processing Account method. Note: If you don’t have the contactId, use our Retrieve Processing Account method or our List Contacts method to search for the contact.",
      "refs": {
        "workflowIds": [
          "delete-a-contact"
        ],
        "operationIds": [
          "deleteContact"
        ]
      }
    },
    {
      "route": "/api/delete-event-subscription",
      "type": "reference",
      "title": "Delete event subscription",
      "description": "DELETE /event-subscriptions/{subscriptionId}",
      "headings": [],
      "plainText": "Use this method to delete an event subscription. Important: After you delete an event subscription, you can’t recover it. You won't receive event notifications from the event subscription. To delete an event subscription, you need its subscriptionId. Our gateway returned the subscriptionId in the response of the Create Event Subscription method. If you want to stop receiving event notifications but don't want to delete the event subscription, use our Update Event Subscription method to deactivate it.",
      "refs": {
        "workflowIds": [
          "create-event-subscription"
        ],
        "operationIds": [
          "deleteEventSubscription"
        ]
      }
    },
    {
      "route": "/api/delete-funding-account",
      "type": "reference",
      "title": "Delete funding account",
      "description": "DELETE /funding-accounts/{fundingAccountId}",
      "headings": [],
      "plainText": "Important: You can't delete a funding account that is associated with a processing account. Use this method to delete a funding account that is associated with a funding recipient. To delete a funding account, you need its fundingAccountId. Our gateway returned the fundingAccountId when you created the funding account. Note: If you don't have the fundingAccountId, use our List Funding Accounts method to search for the funding account.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-account"
        ],
        "operationIds": [
          "deleteFundingAccount"
        ]
      }
    },
    {
      "route": "/api/delete-funding-recipient",
      "type": "reference",
      "title": "Delete funding recipient",
      "description": "DELETE /funding-recipients/{recipientId}",
      "headings": [],
      "plainText": "Use this method to delete a funding recipient, including its funding accounts and owners. To delete a funding recipient, you need its recipientId. Our gateway returned the recipientId in the response of the Create Funding Recipient method. Note : If you don't have the recipientId, use our List Funding Recipients method to search for the funding recipient.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-recipient"
        ],
        "operationIds": [
          "deleteFundingRecipient"
        ]
      }
    },
    {
      "route": "/api/delete-instructions",
      "type": "reference",
      "title": "Delete funding instruction",
      "description": "DELETE /funding-instructions/{instructionId}",
      "headings": [],
      "plainText": "Important: You can delete a funding instruction only if its status is accepted . To view the status of a funding instruction, use our Retrieve Funding Instruction method. Use this method to delete a funding instruction. To delete a funding instruction, you need its instructionId. Our gateway returned the instructionId in the response of the Create Funding Instruction method. Note: If you don't have the instructionId, use our List Funding Instructions method to search for the funding instruction.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-instruction"
        ],
        "operationIds": [
          "deleteInstructions"
        ]
      }
    },
    {
      "route": "/api/delete-owner",
      "type": "reference",
      "title": "Delete owner",
      "description": "DELETE /owners/{ownerId}",
      "headings": [],
      "plainText": "Important: You can't delete an owner of a processing account. Use this method to delete an owner associated with a funding recipient. You can delete an owner only if the funding recipient has more than one owner. To delete an owner, you need their ownerId. Our gateway returned the ownerId in the response of the Create Funding Recipient method and the Create Funding Recipient Owner method. Note: If you don't have the ownerId, use the List Funding Recipient Owners method, the Retrieve Funding Recipient method, or the List Funding Recipients method to search for the funding recipient owner.",
      "refs": {
        "workflowIds": [
          "delete-an-owner"
        ],
        "operationIds": [
          "deleteOwner"
        ]
      }
    },
    {
      "route": "/api/delete-payment-instruction",
      "type": "reference",
      "title": "Cancel payment instruction",
      "description": "DELETE /payment-instructions/{paymentInstructionId}",
      "headings": [],
      "plainText": "Use this method to cancel a payment instruction. You can cancel a payment instruction only if its status is inProgress . To retrieve the status of a payment instruction, use our Retrieve Payment Instruction method. To cancel a payment instruction, you need its paymentInstructionId. Our gateway returned the paymentInstructionId in the response of the Submit Payment Instruction method.",
      "refs": {
        "workflowIds": [
          "cancel-a-device-payment-instruction"
        ],
        "operationIds": [
          "deletePaymentInstruction"
        ]
      }
    },
    {
      "route": "/api/delete-payment-plan",
      "type": "reference",
      "title": "Delete payment plan",
      "description": "DELETE /processing-terminals/{processingTerminalId}/payment-plans/{paymentPlanId}",
      "headings": [],
      "plainText": "Use this method to delete a payment plan. Important: When you delete a payment plan, you can’t recover it. You also won’t be able to add subscriptions to the payment plan. To delete a payment plan, you need its paymentPlanId, which you sent in the request of the Create Payment Plan method. Note: If you don't have the paymentPlanId, use our List Payment Plans method to search for the payment plan. The value you sent for the onDelete parameter when you created the payment plan indicates what happens to associated subscriptions when you delete the plan: complete - Our gateway stops taking payments for the subscriptions associated with the payment plan. continue - Our gateway continues to take payments for the subscriptions associated with the payment plan. To stop a subscription for a canceled payment plan, go to the Deactivate Subscription method.",
      "refs": {
        "workflowIds": [
          "delete-a-payment-plan"
        ],
        "operationIds": [
          "deletePaymentPlan"
        ]
      }
    },
    {
      "route": "/api/delete-pricing-intent",
      "type": "reference",
      "title": "Delete pricing intent",
      "description": "DELETE /pricing-intents/{pricingIntentId}",
      "headings": [],
      "plainText": "Use this method to delete a pricing intent. Important: When you delete a pricing intent, you can't recover it. You also won't be able to assign the pricing intent to a merchant's boarding application. To delete a pricing intent, you need its pricingIntentId. Our gateway returned the pricingIntentId in the response of the Create Pricing Intent method. Note: If you don't have the pricingIntentId, use our List Pricing Intents method to search for the pricing intent.",
      "refs": {
        "workflowIds": [
          "manage-pricing-intents"
        ],
        "operationIds": [
          "deletePricingIntent"
        ]
      }
    },
    {
      "route": "/api/delete-refund-instruction",
      "type": "reference",
      "title": "Cancel refund instruction",
      "description": "DELETE /refund-instructions/{refundInstructionId}",
      "headings": [],
      "plainText": "Use this method to cancel a refund instruction. You can cancel a refund instruction only if its status is inProgress . To retrieve the status of a refund instruction, use our Retrieve Refund Instruction method. To cancel a refund instruction, you need its refundInstructionId. Our gateway returned the refundInstructionId in the response of the Submit Refund Instruction method.",
      "refs": {
        "workflowIds": [
          "cancel-a-device-refund-instruction"
        ],
        "operationIds": [
          "deleteRefundInstruction"
        ]
      }
    },
    {
      "route": "/api/delete-secure-token",
      "type": "reference",
      "title": "Delete secure token",
      "description": "DELETE /processing-terminals/{processingTerminalId}/secure-tokens/{secureTokenId}",
      "headings": [],
      "plainText": "Use this method to delete a secure token and its related payment details from our vault. To delete a secure token, you need its secureTokenId, which you sent in the request of the Create Secure Token method. Note: If you don’t have the secureTokenId, use our List Secure Tokens method to search for the secure token. When you delete a secure token, you can’t recover it, and you can’t reuse its identifier for a new token.",
      "refs": {
        "workflowIds": [
          "delete-a-saved-payment-method"
        ],
        "operationIds": [
          "deleteSecureToken"
        ]
      }
    },
    {
      "route": "/api/delete-signature-instruction",
      "type": "reference",
      "title": "Cancel signature instruction",
      "description": "DELETE /signature-instructions/{signatureInstructionId}",
      "headings": [],
      "plainText": "Use this method to cancel a signature instruction. To cancel a signature instruction, you need its signatureInstructionId. Our gateway returned the signatureInstructionId in the response of the Submit signature instruction method.",
      "refs": {
        "workflowIds": [
          "cancel-a-device-signature-instruction"
        ],
        "operationIds": [
          "deleteSignatureInstruction"
        ]
      }
    },
    {
      "route": "/api/errors",
      "type": "guide",
      "title": "Errors",
      "description": "Reference for all RFC-7807 error codes returned by the Payroc API, including error structure, causes, and example responses for each error type.",
      "headings": [
        "Errors",
        "API error",
        "Example code",
        "Bad request",
        "Example code",
        "Cannot be canceled",
        "Example code",
        "Cannot be modified",
        "Example code",
        "Capability not supported",
        "Example code",
        "Card type is not supported",
        "Example code",
        "Contract already signed",
        "Example code",
        "Currency is not supported",
        "Example code",
        "Daily Discount and RewardPayChoice conflict",
        "Example code",
        "Duplicate unique reference",
        "Forbidden",
        "Example code",
        "Funding accounts limit reached",
        "Example code",
        "Funding accounts restricted",
        "Example code",
        "Idempotency key in use",
        "Example code",
        "Idempotency key missing",
        "Example code",
        "Insufficient funds",
        "Example code",
        "Internal server error",
        "KYC check failed",
        "Example code",
        "Method not supported",
        "National ID in use",
        "Example code",
        "No control prong or authorized signatory",
        "Example code",
        "No pricing agreement exists for the processing account",
        "Example code",
        "Not acceptable",
        "Example code",
        "Not authorized",
        "Example code",
        "Not found",
        "Example code",
        "Not requested by email",
        "Example code",
        "Payload too large",
        "Example code",
        "Processing terminal was not accepted",
        "Example code",
        "Recipient amount value limit exceeded",
        "Example code",
        "Resource already exists",
        "Example code",
        "Search too broad",
        "Example code",
        "Tax ID in use",
        "Example code",
        "Too many control prongs",
        "Example code",
        "Unsupported media type",
        "Example code",
        "Volume limit has been reached",
        "Example code"
      ],
      "plainText": "To help you identify and fix any errors that you may encounter, our errors follow RFC-7807 standards. Our errors include the following fields: type - Link to our developer portal for more information about the error. title - Short description about the error. status - HTTP status code. detail - Longer description about the error. Depending on the type of error we may return additional fields. Errors API error We can’t process your request. We also return an errors array that contains a message field for each error. The message field provides more detail about the error. Example code { \"type\": \"https://docs.payroc.com/api/errors#api-error\", \"title\": \"Api error\", \"status\": 500, \"detail\": \"We are unable to process your request at this time\" \"errors\": [ { \"message\": \"Service offline\" } ] } Bad request Your request is missing a parameter, or a value is in the wrong format. To help you identify the parameter, we also return an errors array that contains the following fields for each incorrect parameter: parameter - Name of the parameter that contains the error. detail - Short description of the error. message - Longer description of the error. Example code { \"type\": \"https://docs.payroc.com/api/errors#bad-request\", \"title\": \"Bad request\", \"status\": 400, \"detail\": \"One or more validation errors occurred, see error section for more info\", \"errors\": [ { \"parameter\": \"start_time\", \"detail\": \"invalid date\", \"message\": \"Expected time, got \\\\\\\"\\\\\\\" for start_time\" } ] } Cannot be canceled You can't cancel the instruction because the instruction failed or the payment device completed the instruction. If the payment device completed the instruction, our gateway also returns a link to the resource. Example code Instruction failed { \"type\": \"https://docs.payroc.com/api/errors#cannot-be-canceled\", \"title\": \"Cannot be canceled\", \"status\": 409, \"detail\": \"You cannot cancel this resource in its current state\", \"errors\": [ { \"message\": \"Failed instruction cannot be canceled\", \"parameter\"",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "getFundingBalance",
          "listFundingAccount"
        ]
      }
    },
    {
      "route": "/api/get-ach-deposit",
      "type": "reference",
      "title": "Retrieve ACH deposit",
      "description": "GET /ach-deposits/{achDepositId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about an ACH deposit that we paid to a merchant. Note: To retrieve an ACH deposit, you need its achDepositId. If you don't have the achDepositId, use our List ACH Deposits method to search for the ACH deposit. Our gateway returns the following information about the ACH deposit: Merchant that we sent the ACH deposit to. Total amount that we paid the merchant. Breakdown of sales, returns, and fees.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getAchDeposit"
        ]
      }
    },
    {
      "route": "/api/get-ach-deposit-fees",
      "type": "reference",
      "title": "List ACH deposit fees",
      "description": "GET /ach-deposit-fees",
      "headings": [],
      "plainText": "Retrieve a list of ACH deposit fees. Important: You must provide a value for either the 'date' query parameter or the 'achDepositId' query parameter.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getAchDepositFees"
        ]
      }
    },
    {
      "route": "/api/get-ach-deposits",
      "type": "reference",
      "title": "List ACH deposits",
      "description": "GET /ach-deposits",
      "headings": [],
      "plainText": "Use this method to return a paginated list of ACH deposits that we paid to your merchants. Note: If you want to view the details of a specific ACH deposit and you have its achDepositId, use our Retrieve ACH Deposit method. Use query parameters to filter the list of results that we return, for example, to search for ACH deposits that we paid to a specific merchant. Important: You must provide a value for the date query parameter. Our gateway returns the following information about each ACH deposit in the list: Merchant that we sent the ACH deposit to. Total amount that we paid the merchant. Breakdown of sales, returns, and fees.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getAchDeposits"
        ]
      }
    },
    {
      "route": "/api/get-attachment",
      "type": "reference",
      "title": "Retrieve attachment",
      "description": "GET /attachments/{attachmentId}",
      "headings": [],
      "plainText": "Use this method to retrieve the details of an attachment. To retrieve the details of an attachment you need its attachmentId. Our gateway returned the attachmentId in the response of the Upload Attachment to Processing Account method. Our gateway returns information about the attachment, including its upload status and the entity that the attachment is linked to. Our gateway doesn't return the file that you uploaded.",
      "refs": {
        "workflowIds": [
          "add-attachment"
        ],
        "operationIds": [
          "getAttachment"
        ]
      }
    },
    {
      "route": "/api/get-authorization",
      "type": "reference",
      "title": "Retrieve authorization",
      "description": "GET /authorizations/{authorizationId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about an authorization. Note: To retrieve an authorization, you need its authorizationId. If you don't have the authorizationId, use our List Authorizations method to search for the authorization. Our gateway returns the following information about the authorization: Authorization response from the issuing bank. Amount that the issuing bank authorized. Merchant that ran the authorization. Details about the customer's card, the transaction, and the batch.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getAuthorization"
        ]
      }
    },
    {
      "route": "/api/get-authorizations",
      "type": "reference",
      "title": "List authorizations",
      "description": "GET /authorizations",
      "headings": [],
      "plainText": "Use this method to retrieve a paginated list of authorizations. Use query parameters to filter the list of results that we return, for example, to search for authorizations linked to a specific merchant. Important: You must provide a value for either the date query parameter or the batchId query parameter. Our gateway returns the following information about each authorization in the list: Authorization response from the issuing bank. Amount that the issuing bank authorized. Merchant that ran the authorization. Details about the customer's card, the transaction, and the batch.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getAuthorizations"
        ]
      }
    },
    {
      "route": "/api/get-bank-transfer-payment",
      "type": "reference",
      "title": "Retrieve payment",
      "description": "GET /bank-transfer-payments/{paymentId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a bank transfer payment. To retrieve a payment, you need its paymentId. Our gateway returned the paymentId in the response of the Create Payment method. Note: If you don’t have the paymentId, use our List Payments method to search for the payment. Our gateway returns the following information about the payment: Order details, including the transaction amount and when it was processed. Bank account details, including the customer’s name and account number. Customer’s details, including the customer’s phone number. Transaction details, including any refunds or re-presentments. If the merchant saved the customer’s bank account details, our gateway returns a secureTokenID, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "close-ach-return",
          "refund-a-bank-transfer-payment",
          "represent-ach-payment"
        ],
        "operationIds": [
          "getBankTransferPayment"
        ]
      }
    },
    {
      "route": "/api/get-bank-transfer-refund",
      "type": "reference",
      "title": "Retrieve refund",
      "description": "GET /bank-transfer-refunds/{refundId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a refund. To retrieve a refund, you need its refundId. Our gateway returned the refundId in the response of the Refund Payment method or the Create Refund method. Note: If you don’t have the refundId, use our List Refunds method to search for the refund. Our gateway returns the following information about the refund: Order details, including the refund amount and when it was processed. Bank account details, including the customer’s name and account number. If the refund is a referenced refund, our gateway also returns details about the payment that the refund is linked to.",
      "refs": {
        "workflowIds": [
          "reverse-a-bank-transfer-refund"
        ],
        "operationIds": [
          "getBankTransferRefund"
        ]
      }
    },
    {
      "route": "/api/get-closed-loop",
      "type": "reference",
      "title": "Retrieve closed loop read",
      "description": "GET /closed-loop-reads/{closedLoopReadId}",
      "headings": [],
      "plainText": "Use this method to retrieve information that a payment device captured from a closed-loop card. A closed-loop card is a type of card that a customer can use only with a specific merchant. Each time a payment device captures information from a closed-loop card, we store the information as a closed-loop read. Our gateway returns the following information from a closed-loop read: Date that the payment device captured the information. Unstructured payload from the card.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "getClosedLoop"
        ]
      }
    },
    {
      "route": "/api/get-contact",
      "type": "reference",
      "title": "Retrieve contact",
      "description": "GET /contacts/{contactId}",
      "headings": [],
      "plainText": "Use this method to retrieve details about a contact. To retrieve a contact, you need its contactId. Our gateway returned the contactId in the Create Processing Account method. Note: If you don't have the contactId, use the List Contacts method to search for the contact. Our gateway returns the following information about a contact: Name and contact method, including their phone number or mobile number. Role within the business, for example, if they are a manager.",
      "refs": {
        "workflowIds": [
          "delete-a-contact",
          "update-a-contact"
        ],
        "operationIds": [
          "getContact"
        ]
      }
    },
    {
      "route": "/api/get-event-subscription",
      "type": "reference",
      "title": "Retrieve event subscription",
      "description": "GET /event-subscriptions/{subscriptionId}",
      "headings": [],
      "plainText": "Use this method to retrieve the details of an event subscription. In your request, include the subscriptionId that we sent to you when we created the event subscription. Note: If you don't know the subscriptionId of the event subscription, go to List event subscriptions .",
      "refs": {
        "workflowIds": [
          "create-event-subscription"
        ],
        "operationIds": [
          "getEventSubscription"
        ]
      }
    },
    {
      "route": "/api/get-funding-account",
      "type": "reference",
      "title": "Retrieve funding account",
      "description": "GET /funding-accounts/{fundingAccountId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a funding account. To retrieve a funding account, you need its fundingAccountId. Our gateway returned the fundingAccountId when you created the funding account. Note: If you don't have the fundingAccountId, use our List Funding Accounts method to search for the account. Our gateway returns the following information about the funding account: Name of the account holder and ACH details for the account. Status of the account. Whether we send funds to the account, withdraw funds from the account, or both.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-account",
          "update-a-funding-account"
        ],
        "operationIds": [
          "getFundingAccount"
        ]
      }
    },
    {
      "route": "/api/get-funding-activity",
      "type": "reference",
      "title": "List funding activity",
      "description": "GET /funding-activity",
      "headings": [],
      "plainText": "Use this method to return a paginated list of activity associated with your merchants' funding balances within a specific date range. Use query parameters to filter the list of results we return, for example, to view the activity for a specific merchant's funding balance. Our gateway returns the following information about each activity in the list: Name of the merchant who owns the funding balance. Amount of funds added or removed from the funding balance. Funding account that received funds from the funding balance.",
      "refs": {
        "workflowIds": [
          "review-funding-activity"
        ],
        "operationIds": [
          "getFundingActivity"
        ]
      }
    },
    {
      "route": "/api/get-funding-balance",
      "type": "reference",
      "title": "List funding balances",
      "description": "GET /funding-balance",
      "headings": [],
      "plainText": "Use this method to return a paginated list of funding balances available for each merchant linked to your account. Use query parameters to filter the list of results we return, for example, to search for the funding balance for a specific merchant. Our gateway returns the following information about each merchant in the list: Total funds for the merchant. Available funds that you can use for funding instructions. Pending funds that we have not yet sent to funding accounts.",
      "refs": {
        "workflowIds": [
          "review-funding-activity",
          "send-funds-to-a-merchant"
        ],
        "operationIds": [
          "getFundingBalance"
        ]
      }
    },
    {
      "route": "/api/get-funding-recipient",
      "type": "reference",
      "title": "Retrieve funding recipient",
      "description": "GET /funding-recipients/{recipientId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a funding recipient. To retrieve a funding recipient, you need its recipientId. Our gateway returned the recipientId in the response of the Create Funding Recipient method. Note: If you don't have the recipientId, use our List Funding Recipients method to search for the funding recipient. Our gateway returns the following information about the funding recipient: Tax ID and Doing Business As (DBA) name. Address and contact details. Funding accounts linked to the funding recipient.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-recipient",
          "manage-funding-recipients",
          "update-a-funding-recipient"
        ],
        "operationIds": [
          "getFundingRecipient"
        ]
      }
    },
    {
      "route": "/api/get-fx-rates",
      "type": "reference",
      "title": "Verify DCC eligibility",
      "description": "POST /fx-rates",
      "headings": [],
      "plainText": "Important: There are restrictions on which merchants can use this method. For more information, go to Dynamic Currency Conversion . Use this method to check if a card is eligible for Dynamic Currency Conversion (DCC) and to retrieve the conversion rate for a transaction amount. DCC provides a customer with the option to use their card's currency instead of the merchant's currency, for example, in Ireland, an American customer can pay in US dollars instead of Euros. The request includes the following: Payment method - Card information, a secure token, or digital wallet. Transaction information - Amount and currency of the transaction in the merchant's currency. If the card is eligible for DCC, our gateway returns the transaction amount in the card's currency and a dccOffer object that contains information about the conversion rate. The dccOffer object contains the following fields that you need when you run a sale or unreferenced refund with DCC: fxAmount fxCurrency fxRate markup accepted offerReference",
      "refs": {
        "workflowIds": [
          "check-dcc-eligibility"
        ],
        "operationIds": [
          "getFxRates"
        ]
      }
    },
    {
      "route": "/api/get-instruction",
      "type": "reference",
      "title": "Retrieve funding instruction",
      "description": "GET /funding-instructions/{instructionId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a funding instruction. To retrieve a funding instruction, you need its instructionId. Our gateway returned the instructionId in the response of the Create Funding Instruction method. Note: If you don't have the instructionId, use our List Funding Instructions method to search for the funding instruction. Our gateway returns the following information about the funding instruction: Status of the funding instruction. Funding information, including which merchant's funding balance we distribute and the funding account that we send the balance to.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-instruction",
          "update-a-funding-instruction"
        ],
        "operationIds": [
          "getInstruction"
        ]
      }
    },
    {
      "route": "/api/get-merchant-accounts",
      "type": "reference",
      "title": "Retrieve merchant platform",
      "description": "GET /merchant-platforms/{merchantPlatformId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a merchant platform. To retrieve a merchant platform, you need its merchantPlatformId. Our gateway returned the merchantPlatformId in the response of the Create Merchant Platform method. Note: If you don't have the merchantPlatformId, use our List Merchant Platforms method to search for the merchant platform. Our gateway returns the following information about the merchant platform: Legal information, including its legal name and address. Contact information, including the email address for the business. Processing account information, including the processingAccountId and status of each processing account that's linked to the merchant platform.",
      "refs": {
        "workflowIds": [
          "review-merchant-hierarchy"
        ],
        "operationIds": [
          "getMerchantAccounts"
        ]
      }
    },
    {
      "route": "/api/get-owner",
      "type": "reference",
      "title": "Retrieve owner",
      "description": "GET /owners/{ownerId}",
      "headings": [],
      "plainText": "Use this method to retrieve details about an owner of a processing account or an owner associated with a funding recipient. To retrieve an owner, you need their ownerId. Our gateway returned the ownerId in the response of the Create Processing Account method or the Create Funding Recipient Owner method. Note: If you don't have the ownerId, use the Retrieve Processing Account method if you are searching for a processing account owner, or use the List Funding Recipient Owners method if you are searching for a funding recipient owner. Our gateway returns the following information about an owner: Name, date of birth, and address. Contact details, including their email address. Relationship to the business, including whether they are a control prong or authorized signatory, and their equity stake in the business.",
      "refs": {
        "workflowIds": [
          "delete-an-owner",
          "update-an-owner"
        ],
        "operationIds": [
          "getOwner"
        ]
      }
    },
    {
      "route": "/api/get-payment",
      "type": "reference",
      "title": "Retrieve payment",
      "description": "GET /payments/{paymentId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a card payment. To retrieve a payment, you need its paymentId. Our gateway returned the paymentId in the response of the Create Payment method. Note: If you don't have the paymentId, use our List Payments method to search for the payment. Our gateway returns the following information about the payment: Order details, including the transaction amount and when it was processed. Payment card details, including the masked card number, expiry date, and payment method. Cardholder details, including their contact information and shipping address. Payment details, including the payment type, status, and response. If the merchant saved the customer's card details, our gateway returns a secureTokenID, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "adjust-a-payment",
          "refund-a-card-payment",
          "run-a-sale-on-a-device"
        ],
        "operationIds": [
          "getPayment"
        ]
      }
    },
    {
      "route": "/api/get-payment-instruction",
      "type": "reference",
      "title": "Retrieve payment instruction",
      "description": "GET /payment-instructions/{paymentInstructionId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a payment instruction. To retrieve a payment instruction, you need its paymentInstructionId. Our gateway returned the paymentInstructionId in the response of the Submit Payment Instruction method. Our gateway returns the status of the payment instruction. If the payment device completed the payment instruction, the response also includes a link to the payment.",
      "refs": {
        "workflowIds": [
          "cancel-a-device-payment-instruction",
          "run-a-sale-on-a-device"
        ],
        "operationIds": [
          "getPaymentInstruction"
        ]
      }
    },
    {
      "route": "/api/get-payment-intent",
      "type": "reference",
      "title": "Retrieve payment intent",
      "description": "GET /payment-intents/{paymentIntentId}",
      "headings": [],
      "plainText": "Use this method to retrieve a payment intent, including who is paying for the terminal order and how they are paying for the terminal order. Include the paymentIntentId that we sent you when you created the terminal order.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "getPaymentIntent"
        ]
      }
    },
    {
      "route": "/api/get-payment-plan",
      "type": "reference",
      "title": "Retrieve payment plan",
      "description": "GET /processing-terminals/{processingTerminalId}/payment-plans/{paymentPlanId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a payment plan. To retrieve a payment plan, you need its paymentPlanId. Our gateway returned the paymentPlanId in the response of the Create Payment Plan method. Note: If you don't have the paymentPlanId, use our List Payment Plans method to search for the payment plan. Our gateway returns the following information about the payment plan: Name, length, and currency of the plan How often our gateway collects each payment How much our gateway collects for each payment What happens if the merchant updates or deletes the plan",
      "refs": {
        "workflowIds": [
          "delete-a-payment-plan",
          "manage-payment-plans",
          "update-a-payment-plan"
        ],
        "operationIds": [
          "getPaymentPlan"
        ]
      }
    },
    {
      "route": "/api/get-pricing-intent",
      "type": "reference",
      "title": "Retrieve pricing intent",
      "description": "GET /pricing-intents/{pricingIntentId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a pricing intent. To retrieve a pricing intent, you need its pricingIntentId. Our gateway returned the pricingIntentId in the response of the Create Pricing Intent method. Note: If you don't have the pricingIntentId, use our List Pricing Intents method to search for the pricing intent. Our gateway returns the following information about the pricing intent: Information about the fees, including the base fees, gateway fees, and processor fees. Status of the pricing intent, including whether we approved the pricing intent.",
      "refs": {
        "workflowIds": [
          "manage-pricing-intents"
        ],
        "operationIds": [
          "getPricingIntent"
        ]
      }
    },
    {
      "route": "/api/get-processing-accounts",
      "type": "reference",
      "title": "Retrieve processing account",
      "description": "GET /processing-accounts/{processingAccountId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a specific processing account. To retrieve a processing account, you need its processingAccountId. Our gateway returned the processingAccountId in the response of the Create Merchant Platform method or the Create Processing Account method. Note: If you don't have the processingAccountId, use our List Merchant Platform's Processing Accounts method to search for the processing account. Our gateway returns the following information about the processing account: Business information, including the Merchant Category Code (MCC), status of the processing account, and address of the business. Processing information, including the merchant’s refund policies and card types that the merchant accepts. Funding information, including funding schedules, funding fees, and details for the merchant’s funding accounts. Pricing information, including HATEOAS links to retrieve the pricing program for the processing account.",
      "refs": {
        "workflowIds": [
          "review-merchant-hierarchy"
        ],
        "operationIds": [
          "getProcessingAccounts"
        ]
      }
    },
    {
      "route": "/api/get-processing-terminal",
      "type": "reference",
      "title": "Retrieve processing terminal",
      "description": "GET /processing-terminals/{processingTerminalId}",
      "headings": [],
      "plainText": "Important: You can retrieve a processing terminal only if the terminal order was created using the Payroc API. Use this method to retrieve information about a processing terminal. To retrieve a processing terminal, you need its processingTerminalId. Our gateway returned the processingTerminalId in the response of the Create Terminal Order method. Note: If you don't have the processingTerminalId, use our Retrieve Terminal Order method or our List Processing Terminals method to search for the processing terminal. Our gateway returns the following information about the processing terminal: Status indicating whether the terminal is active or inactive. Configuration settings, including gateway settings and application settings. Features, receipt settings, and security settings. Devices that use the processing terminal's configuration.",
      "refs": {
        "workflowIds": [
          "configure-a-device"
        ],
        "operationIds": [
          "getProcessingTerminal"
        ]
      }
    },
    {
      "route": "/api/get-processing-terminal-host-configuration",
      "type": "reference",
      "title": "Retrieve host processor configuration",
      "description": "GET /processing-terminals/{processingTerminalId}/host-configurations",
      "headings": [],
      "plainText": "Use this method to retrieve the host processor configuration of a processing terminal. Integrate with this method only if you use your own gateway and want to validate the processor configuration. Our gateway returns the configuration settings for the merchant and the payment terminal.",
      "refs": {
        "workflowIds": [
          "configure-a-device"
        ],
        "operationIds": [
          "getProcessingTerminalHostConfiguration"
        ]
      }
    },
    {
      "route": "/api/get-refund",
      "type": "reference",
      "title": "Retrieve refund",
      "description": "GET /refunds/{refundId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a refund. To retrieve a refund, you need its refundId. Our gateway returned the refundId in the response of the Refund Payment method or the Create Refund method. Note: If you don't have the refundId, use our List Refunds method to search for the refund. Our gateway returns the following information about the refund: Order details, including the refund amount and when we processed the refund. Payment card details, including the masked card number, expiry date, and payment method. Cardholder details, including their contact information and shipping address. If the refund is a referenced refund, our gateway also returns details about the payment that the refund is linked to.",
      "refs": {
        "workflowIds": [
          "adjust-a-refund",
          "refund-on-a-device",
          "reverse-a-refund"
        ],
        "operationIds": [
          "getRefund"
        ]
      }
    },
    {
      "route": "/api/get-refund-instruction",
      "type": "reference",
      "title": "Retrieve refund instruction",
      "description": "GET /refund-instructions/{refundInstructionId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a refund instruction. To retrieve a refund instruction, you need its refundInstructionId. Our gateway returned the refundInstructionId in the response of the Submit Refund Instruction method. Our gateway returns the status of the refund instruction. If the payment device completed the refund instruction, the response also includes a link to the refund.",
      "refs": {
        "workflowIds": [
          "cancel-a-device-refund-instruction",
          "refund-on-a-device"
        ],
        "operationIds": [
          "getRefundInstruction"
        ]
      }
    },
    {
      "route": "/api/get-secure-token",
      "type": "reference",
      "title": "Retrieve secure token",
      "description": "GET /processing-terminals/{processingTerminalId}/secure-tokens/{secureTokenId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a secure token. To retrieve a secure token, you need its secureTokenID, which you sent in the request of the Create Secure Token method. Note: If you don't have the secureTokenId, use our List Secure Tokens method to search for the secure token. Our gateway returns the following information about the secure token: Payment details that the secure token represents. Customer details, including shipping and billing addresses. Secure token that you can use to carry out transactions.",
      "refs": {
        "workflowIds": [
          "delete-a-saved-payment-method",
          "refresh-a-saved-payment-method",
          "update-a-saved-payment-method"
        ],
        "operationIds": [
          "getSecureToken"
        ]
      }
    },
    {
      "route": "/api/get-signature-instruction",
      "type": "reference",
      "title": "Retrieve signature instruction",
      "description": "GET /signature-instructions/{signatureInstructionId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a signature instruction. To retrieve a signature instruction, you need its signatureInstructionId. Our gateway returned the signatureInstructionId in the response of the Submit Signature Instruction method. Our gateway returns the status of the instruction. If the payment device completed the instruction, the response also includes a link to retrieve the signature.",
      "refs": {
        "workflowIds": [
          "cancel-a-device-signature-instruction",
          "capture-signature-on-a-device"
        ],
        "operationIds": [
          "getSignatureInstruction"
        ]
      }
    },
    {
      "route": "/api/get-subscription",
      "type": "reference",
      "title": "Retrieve subscription",
      "description": "GET /processing-terminals/{processingTerminalId}/subscriptions/{subscriptionId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a subscription. To retrieve a subscription, you need its subscriptionId. You sent the subscriptionId in the request of the Create subscription method. Note: If you don't have the subscriptionId, use our List subscriptions method to search for the subscription. Our gateway returns information about the following for the subscription: Payment plan the subscription is linked to. Secure token that represents cardholder’s payment details. Current state of the subscription, including its status, next due date, and invoices. Fees for setup and the cost of the recurring order. Subscription length, end date, and frequency. We also return the paymentPlanId and the secureTokenId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "manage-subscriptions"
        ],
        "operationIds": [
          "getSubscription"
        ]
      }
    },
    {
      "route": "/api/get-terminal-order",
      "type": "reference",
      "title": "Retrieve terminal order",
      "description": "GET /terminal-orders/{terminalOrderId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a terminal order. To retrieve a terminal order, you need it's terminalOrderId. Our gateway returned the terminalOrderId in the response of the Create Terminal Order method. Note : If you don't have the terminalOrderId, use our List Terminal Orders method to search for the terminal order. Our gateway returns the following information about the terminal order: Status of the order Items in the order Training provider Shipping information Note : You can subscribe to our terminalOrder.status.changed event to get notifications when we update the status of a terminal order. For more information about how to subscribe to events, go to Events Subscriptions .",
      "refs": {
        "workflowIds": [
          "order-a-terminal"
        ],
        "operationIds": [
          "getTerminalOrder"
        ]
      }
    },
    {
      "route": "/api/get-transactions",
      "type": "reference",
      "title": "List transactions",
      "description": "GET /transactions",
      "headings": [],
      "plainText": "Use this method to return a paginated list of your merchants’ transactions. Note: If you want to view the details of a specific transaction and you have its transactionId, use our Retrieve Transaction method. Use query parameters to filter the list of results that we return, for example, to search for transactions for a specific merchant. Important: You must provide a value for either the date query parameter or the batchId query parameter. Our gateway returns the following information about each transaction in the list: Merchant and processing account that ran the transaction. Transaction type, date, amount, and the payment method that the customer used. Batch that contains the transaction, and authorization details for the transaction. Processor that settled the transaction and the ACH deposit containing the transaction.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getTransactions"
        ]
      }
    },
    {
      "route": "/api/getbatch",
      "type": "reference",
      "title": "Retrieve batch",
      "description": "GET /batches/{batchId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a batch. Note: To retrieve a batch, you need its batchId. If you don't have the batchId, use our List Batches method to search for the batch. Our gateway returns the following information about the batch: Transaction information, including the number of transactions and total value of sales. Merchant information, including the merchant ID (MID) and the processing account that the batch is associated with.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getbatch"
        ]
      }
    },
    {
      "route": "/api/getbatches",
      "type": "reference",
      "title": "List batches",
      "description": "GET /batches",
      "headings": [],
      "plainText": "Use this method to return a paginated list of batches that your merchants submitted to the processor on a specific date. Note: If you want to view the details of a specific batch and you have its batchId, use our Retrieve Batch method. Use query parameters to filter the list of results that we return, for example, to search for batches that were submitted by a specific merchant. Important: You must provide a value for the date query parameter. Our gateway returns the following information about each batch in the list: Transaction information, including the number of transactions and total value of sales. Merchant information, including the merchant ID (MID) and the processing account that the batch is associated with.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getbatches"
        ]
      }
    },
    {
      "route": "/api/getdisputes",
      "type": "reference",
      "title": "List disputes",
      "description": "GET /disputes",
      "headings": [],
      "plainText": "Use this method to return a paginated list of disputes. Use query parameters to filter the list of results that we return, for example, to search for disputes linked to a specific merchant. Important: You must provide a value for the date query parameter. Our gateway returns the following information about each dispute in the list: Its status, type, and description. Transaction that the dispute is linked to, including the transaction date, merchant who ran the transaction, and the payment method that the cardholder used.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getdisputes"
        ]
      }
    },
    {
      "route": "/api/getdisputes-statuses",
      "type": "reference",
      "title": "List dispute statuses",
      "description": "GET /disputes/{disputeId}/statuses",
      "headings": [],
      "plainText": "Use this method to return the status history of a dispute. To view the status history of a dispute, you need its disputeId. If you don't have the disputeId, use our List Disputes method to search for the dispute. Our gateway returns a list that contains each status change, the date it was changed, and its updated status.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getdisputesStatuses"
        ]
      }
    },
    {
      "route": "/api/gettransaction",
      "type": "reference",
      "title": "Retrieve transaction",
      "description": "GET /transactions/{transactionId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a transaction. Note: To retrieve a transaction, you need its transactionId. If you don't have the transactionId, use our List Transactions method to search for the transaction. Our gateway returns the following information about the transaction: Merchant and processing account that ran the transaction. Transaction type, date, amount, and the payment method that the customer used. Batch that contains the transaction, and authorization details for the transaction. Processor that settled the transaction and the ACH deposit containing the transaction.",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "gettransaction"
        ]
      }
    },
    {
      "route": "/api/idempotency",
      "type": "guide",
      "title": "Idempotency",
      "description": "Explains how the Payroc API implements idempotency for POST and PATCH requests using the Idempotency-Key header to prevent duplicate processing.",
      "headings": [
        "Example use case for idempotency",
        "How to make POST requests and PATCH requests idempotent",
        "How we process POST requests and PATCH requests"
      ],
      "plainText": "Idempotency is an important property of our API that prevents you from changing a record if you make the same request multiple times. If you send the same request, we return the same response that we returned for the initial request. We do not update the record. Example use case for idempotency You send a request to take a payment of $20 from a customer's account. Our gateway successfully processes the payment and takes $20 from the account. Our gateway sends you a response to notify you of the successful transaction. There is a network error, and the response doesn't reach you. You resend the request to process the payment. Our gateway detects that the request is the same as the initial request and resends the initial response. Our gateway does not process an additional $20 payment. We follow RESTful standards when designing our API, which means that all GET requests, PUT requests, and DELETE requests are idempotent. We have also implemented additional features to guarantee that POST requests and PATCH requests are idempotent. How to make POST requests and PATCH requests idempotent To implement idempotency on POST requests and PATCH requests, you must include an Idempotency-Key header with each request. If your request does not include an Idempotency-Key header, we return a 400 Bad Request error. Important: The value that you generate for an Idempotency-Key header must be a unique universal identifier version 4 (UUID v4) value. To support idempotent POST requests and PATCH requests, we save the following information for seven days: The Idempotency-Key value, URI, and body of your initial request The response body and status code that we returned for your initial request How we process POST requests and PATCH requests When we receive a POST request or PATCH request, we verify that it is unique by checking the combination of Idempotency-Key value, URI, and request body. Depending on the results of our verification, we complete one of the following actions: We have no",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/api/list-bank-transfer-payments",
      "type": "reference",
      "title": "List payments",
      "description": "GET /bank-transfer-payments",
      "headings": [],
      "plainText": "Use this method to return a paginated list of payments. Note: If you want to view the details of a specific payment and you have its paymentId, use our Retrieve Payment method. Use query parameters to filter the list of results that we return, for example, to search for payments for a customer, a date range, or a settlement state. Our gateway returns the following information about each payment in the list: Order details, including the transaction amount and when it was processed. Bank account details, including the customer’s name and account number. Customer's details, including the customer’s phone number. Transaction details, including any refunds or re-presentments. For each transaction, we also return the paymentId and an optional secureTokenId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "refund-a-bank-transfer-payment",
          "reverse-a-bank-transfer-payment"
        ],
        "operationIds": [
          "listBankTransferPayments"
        ]
      }
    },
    {
      "route": "/api/list-bank-transfer-refunds",
      "type": "reference",
      "title": "List refunds",
      "description": "GET /bank-transfer-refunds",
      "headings": [],
      "plainText": "Use this method to return a paginated list of bank transfer refunds. Note: If you want to view the details of a specific refund and you have its refundId, use our Retrieve Refund method. Use query parameters to filter the list of results that we return, for example, to search for refunds for a customer, an orderId, or a date range. Our gateway returns the following information about each refund in the list: Order details, including the refund amount and when it was processed. Bank account details, including the customer’s name and account number. For referenced refunds, our gateway also returns details about the payment that the refund is linked to.",
      "refs": {
        "workflowIds": [
          "reverse-a-bank-transfer-refund"
        ],
        "operationIds": [
          "listBankTransferRefunds"
        ]
      }
    },
    {
      "route": "/api/list-event-subscriptions",
      "type": "reference",
      "title": "List event subscriptions",
      "description": "GET /event-subscriptions",
      "headings": [],
      "plainText": "Use this method to return a paginated list of event subscriptions that are linked to your ISV account. Note: If you want to view the details of a specific event subscription and you have its id, use our Retrieve Event Subscription method. Use query parameters to filter the list of results that we return, for example, to search for subscriptions with a specific status or an event type. Our gateway returns the following information about each subscription in the list: Event types that you have subscribed to. Whether you have enabled notifications for the subscription. How we contact you when an event occurs, including the endpoint that send notifications to. If there are any issues when we try to send you a notification, for example, if we can't contact your endpoint. For each event subscription, we also return its id, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "create-event-subscription"
        ],
        "operationIds": [
          "listEventSubscriptions"
        ]
      }
    },
    {
      "route": "/api/list-fund-recipient-funding-accounts",
      "type": "reference",
      "title": "List funding recipient's funding accounts",
      "description": "GET /funding-recipients/{recipientId}/funding-accounts",
      "headings": [],
      "plainText": "Use this method to return a list of funding accounts associated with a funding recipient. Note: If you want to view the details of a specific funding account and you have its fundingAccountId, use our Retrieve Funding Account method. To retrieve the funding accounts associated with a funding recipient, you need the recipientId. If you don't have the recipientId, use our List Funding Recipients method to search for the funding recipient. Our gateway returns the following information about each funding account: Name of the account holder. ACH details for the account. Status of the account. Our gateway also returns the fundingAccountId, which you can use to run follow-on actions.",
      "refs": {
        "workflowIds": [
          "manage-funding-recipients"
        ],
        "operationIds": [
          "listFundRecipientFundingAccounts"
        ]
      }
    },
    {
      "route": "/api/list-fund-recipient-owners",
      "type": "reference",
      "title": "List funding recipient owners",
      "description": "GET /funding-recipients/{recipientId}/owners",
      "headings": [],
      "plainText": "Use this method to return a list of owners of a funding recipient. Note: If you want to view the details of a specific owner and you have their ownerId, use our Retrieve Owner method. To list the owners of a funding recipient, you need its recipientId. Our gateway returned the recipientId in the response of the Create Funding Recipient method. If you don't have the recipientId, use our List Funding Recipients method to search for the funding recipient. Our gateway returns the following information about each owner in the list: Name, date of birth, and address. Contact details, including their email address. Relationship to the funding recipient. Our gateway also returns the ownerId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "delete-an-owner",
          "manage-funding-recipients"
        ],
        "operationIds": [
          "listFundRecipientOwners"
        ]
      }
    },
    {
      "route": "/api/list-funding-account",
      "type": "reference",
      "title": "List funding accounts",
      "description": "GET /funding-accounts",
      "headings": [],
      "plainText": "Use this method to return a paginated list of funding accounts associated with your account. Note: If you want to view the details of a specific funding account and you have its fundingAccountId, use our Retrieve Funding Account method. Our gateway returns the following information about each funding account in the list: Name of the account holder and ACH details for the account. Status of the account. Whether we send funds to the account, withdraw funds from the account, or both. For each funding account, we also return the fundingAccountId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-account",
          "update-a-funding-account"
        ],
        "operationIds": [
          "listFundingAccount"
        ]
      }
    },
    {
      "route": "/api/list-funding-recipients",
      "type": "reference",
      "title": "List funding recipients",
      "description": "GET /funding-recipients",
      "headings": [],
      "plainText": "Use this method to return a paginated list of funding recipients linked to your account. Note: If you want to view the details of a specific funding recipient and you have its recipientId, use our Retrieve Funding Recipient method. Our gateway returns the following information about each funding recipient in the list: Tax ID and Doing Business As (DBA) name. Address and contact details. Funding accounts linked to the funding recipient. For each funding recipient, we also return the recipientId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-recipient",
          "manage-funding-recipients",
          "update-a-funding-recipient"
        ],
        "operationIds": [
          "listFundingRecipients"
        ]
      }
    },
    {
      "route": "/api/list-instructions",
      "type": "reference",
      "title": "List funding instructions",
      "description": "GET /funding-instructions",
      "headings": [],
      "plainText": "Important: You can return a list of funding instructions from only the previous two years. If you want to view a funding instruction from more than two years ago and you have its instructionId, use our Retrieve Funding Instruction method. Use this method to return a paginated list of funding instructions within a specific date range. Note: If you want to view the details of a specific funding instruction and you have its instructionId, use our Retrieve Funding Instruction method. Our gateway returns the following information for each instruction in the list: Status of the funding instruction. Funding information, including which merchant's funding balance we distribute and the funding account that we send the balance to. For each funding instruction, we also return the instructionId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-instruction",
          "update-a-funding-instruction"
        ],
        "operationIds": [
          "listInstructions"
        ]
      }
    },
    {
      "route": "/api/list-merchant-locations",
      "type": "reference",
      "title": "List merchant platform's processing accounts",
      "description": "GET /merchant-platforms/{merchantPlatformId}/processing-accounts",
      "headings": [],
      "plainText": "Use this method to return a paginated list of processing accounts linked to a merchant platform. Note : If you want to view the details of a specific processing account and you have its processingAccountId, use our Retrieve Processing Account method. Use the query parameters to filter the list of results that we return, for example, to search for only closed processing accounts. To list the processing accounts for a merchant platform, you need its merchantPlatformId. If you don't have the merchantPlatformId, use our List Merchant Platforms method to search for the merchant platform. Our gateway returns the following information about eahc processing account in the list: Business details, including its status, time zone, and address. Owners' details, including their contact details. Funding, pricing, and processing information, including its pricing model and funding accounts. For each processing account, we also return its processingAccountId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "review-merchant-hierarchy"
        ],
        "operationIds": [
          "listMerchantLocations"
        ]
      }
    },
    {
      "route": "/api/list-merchant-owners",
      "type": "reference",
      "title": "List owners",
      "description": "GET /processing-accounts/{processingAccountId}/owners",
      "headings": [],
      "plainText": "Use this method to return a list of owners of a processing account. Note: If you want to view the details of a specific owner and you have the ownerId, go to our Retrieve Owner method. To list the owners of a processing account, you need its processingAccountId. If you don't have the processingAccountId, use our List Merchant Platform's Processing Accounts method to search for the processing account. Our gateway returns the following information about each owner in the list: Name, date of birth, and address. Contact details, including their email address. Relationship to the business, including whether they are a control prong or authorized signatory, and their equity stake in the business.",
      "refs": {
        "workflowIds": [
          "review-merchant-hierarchy",
          "update-an-owner"
        ],
        "operationIds": [
          "listMerchantOwners"
        ]
      }
    },
    {
      "route": "/api/list-merchant-platforms",
      "type": "reference",
      "title": "List merchant platforms",
      "description": "GET /merchant-platforms",
      "headings": [],
      "plainText": "Use this method to return a paginated list of merchant platforms that are linked to your ISV account. Note : If you want to view the details of a specific merchant platform and you have its merchantPlatformId, use our Retrieve Merchant Platform method. Our gateway returns the following information about each merchant platform in the list: Legal information, including its legal name and address. Contact information, including the email address for the business. Processing account information, including the processingAccountId and status of each processing account that's linked to the merchant platform. For each merchant platform, we also return its merchantPlatformId and its linked processingAccountIds, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "review-merchant-hierarchy"
        ],
        "operationIds": [
          "listMerchantPlatforms"
        ]
      }
    },
    {
      "route": "/api/list-payment-link-share-events",
      "type": "reference",
      "title": "List payment link sharing events",
      "description": "GET /payment-links/{paymentLinkId}/sharing-events",
      "headings": [],
      "plainText": "Use this method to return a paginated list of sharing events for a payment link. A sharing event occurs when a merchant shares a payment link with a customer. To list the sharing events for a payment link, you need its paymentLinkId. Our gateway returned the paymentLinkId in the response of the Create Payment Link method. Note: If you don't have the paymentLinkId, use our List Payment Links method to search for the payment link. Use query parameters to filter the list of results that we return, for example, to search for links sent to a specific customer. Our gateway returns the following information for each sharing event in the list: Customer that the merchant sent the link to. Date that the merchant sent the link.",
      "refs": {
        "workflowIds": [
          "collect-with-payment-link"
        ],
        "operationIds": [
          "listPaymentLinkShareEvents"
        ]
      }
    },
    {
      "route": "/api/list-payment-links",
      "type": "reference",
      "title": "List payment links",
      "description": "GET /processing-terminals/{processingTerminalId}/payment-links",
      "headings": [],
      "plainText": "Use this method to return a paginated list of payment links linked to a processing terminal. Note: If you want to view the details of a specific payment link and you have its paymentLinkId, use our Retrieve Payment Link method. Use query parameters to filter the list of results that we return, for example, to search for only active links or multi-use links. Our gateway returns the following information about each payment link in the list: type - Indicates whether the link can be used only once or if it can be used multiple times. authType - Indicates whether the transaction is a sale or a pre-authorization. paymentMethods - Indicates the payment method that the merchant accepts. charge - Indicates whether the merchant or the customer enters the amount for the transaction. status - Indicates if the payment link is active. For each payment link, we also return a paymentLinkId, which you can use for follow-on actions.",
      "refs": {
        "workflowIds": [
          "collect-with-payment-link"
        ],
        "operationIds": [
          "listPaymentLinks"
        ]
      }
    },
    {
      "route": "/api/list-payment-plans",
      "type": "reference",
      "title": "List payment plans",
      "description": "GET /processing-terminals/{processingTerminalId}/payment-plans",
      "headings": [],
      "plainText": "Use this method to return a paginated list of payment plans for a processing terminal. Note: If you want to view the details of a specific payment plan and you have its paymentPlanId, use our Retrieve Payment Plan method. Our gateway returns the following information about each payment plan in the list: Name, length, and currency of the plan How often our gateway collects each payment How much our gateway collects for each payment What happens if the merchant updates or deletes the plan For each payment plan, we return the paymentPlanId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "delete-a-payment-plan",
          "manage-payment-plans",
          "update-a-payment-plan"
        ],
        "operationIds": [
          "listPaymentPlans"
        ]
      }
    },
    {
      "route": "/api/list-payments",
      "type": "reference",
      "title": "List payments",
      "description": "GET /payments",
      "headings": [],
      "plainText": "Use this method to return a paginated list of payments. Note: If you want to view the details of a specific payment and you have its paymentId, use our Retrieve Payment method. Use query parameters to filter the list of results that we return, for example, to search for payments for a customer, a tip mode, or a date range. Our gateway returns the following information about each payment in the list: Order details, including the transaction amount and when it was processed. Payment card details, including the masked card number, expiry date, and payment method. Cardholder details, including their contact information and shipping address. Payment details, including the payment type, status, and response. For each transaction, we also return the paymentId and an optional secureTokenId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "adjust-a-payment",
          "refund-a-card-payment",
          "reverse-a-card-payment"
        ],
        "operationIds": [
          "listPayments"
        ]
      }
    },
    {
      "route": "/api/list-pricing-intents",
      "type": "reference",
      "title": "List pricing intents",
      "description": "GET /pricing-intents",
      "headings": [],
      "plainText": "Use this method to return a paginated list of pricing intents associated with the ISV. Note: If you want to view the details of a specific pricing intent and you have its pricingIntentId, use our Retrieve Pricing Intent method. Our gateway returns the following information about each pricing intent in the list: Information about the fees, including the base fees, gateway fees, and processor fees. Status of the pricing intent, including whether we approved the pricing intent. For each pricing intent, we also return its pricingIntentId which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "manage-pricing-intents"
        ],
        "operationIds": [
          "listPricingIntents"
        ]
      }
    },
    {
      "route": "/api/list-processing-account-contacts",
      "type": "reference",
      "title": "List contacts",
      "description": "GET /processing-accounts/{processingAccountId}/contacts",
      "headings": [],
      "plainText": "Use this method to return a list of contacts for a processing account. Note: If you want to view the details of a specific contact and you have their contactId, use our Retrieve Contact method. To list contacts for a processing account, you need the processingAccountId. Our gateway returned the processingAccountId in the response of the Create Merchant Platform method or the Create Processing Account method. Our gateway returns the following information about each contact: Name and contact method, including their phone number or mobile number. Role within the business, for example, if they are a manager. For each contact, we also return a contactId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "delete-a-contact",
          "review-merchant-hierarchy",
          "update-a-contact"
        ],
        "operationIds": [
          "listProcessingAccountContacts"
        ]
      }
    },
    {
      "route": "/api/list-processing-accounts-funding-accounts",
      "type": "reference",
      "title": "List processing account's funding accounts",
      "description": "GET /processing-accounts/{processingAccountId}/funding-accounts",
      "headings": [],
      "plainText": "Use this method to return a list of funding accounts linked to a processing acccount. To retrieve a list of funding accounts for a processing account, you need the processingAccountId. Our gateway returned the processingAccountId in the response of the Create Merchant Platform method or the Create Proccessing Account method. Our gateway returns information about the following for each funding account in the list: Account information, including the name on the account and payment methods. Status, including whether we have approved or rejected the account. For each funding account, we also return its fundingAccountId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "review-merchant-hierarchy"
        ],
        "operationIds": [
          "listProcessingAccountsFundingAccounts"
        ]
      }
    },
    {
      "route": "/api/list-processing-accounts-processing-terminals",
      "type": "reference",
      "title": "List processing terminals",
      "description": "GET /processing-accounts/{processingAccountId}/processing-terminals",
      "headings": [],
      "plainText": "Use this method to return a paginated list of processing terminals associated with a processing account. Note: If you want to view the details of a specific processing terminal and you have its processingTerminalId, use our Retrieve Processing Terminal method. To list the terminals for a processing account, you need its processingAccountId. If you don't have the processingAccountId, use our List Merchant Platforms method to search for a merchant platform and its processing accounts. Our gateway returns the following information for each processing terminal in the list: Status indicating whether the terminal is active or inactive. Configuration settings, including gateway settings and application settings. Features, receipt settings, and security settings. Devices that use the processing terminal's configuration. For each processing terminal, we also return its processingTerminalId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "review-merchant-hierarchy"
        ],
        "operationIds": [
          "listProcessingAccountsProcessingTerminals"
        ]
      }
    },
    {
      "route": "/api/list-processing-accounts-terminal-orders",
      "type": "reference",
      "title": "List terminal orders",
      "description": "GET /processing-accounts/{processingAccountId}/terminal-orders",
      "headings": [],
      "plainText": "Use this method to return a paginated list of terminal orders associated with a processing account. Note: If you want to view the details of a specific terminal order and you have its terminalOrderId, use our Retrieve Terminal Order method. Use the query parameters to filter the list of results that we return, for example, to search for terminal orders by their status. To list the terminal orders for a processing account, you need its processingAccountId. If you don't have the processingAccountId, use our List Merchant Platforms method to search for a merchant platform and its processing accounts. Our gateway returns the following information for each terminal order in the list: Status of the order Items in the order Training provider Shipping information For each terminal order, we also return its terminalOrderId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "review-merchant-hierarchy"
        ],
        "operationIds": [
          "listProcessingAccountsTerminalOrders"
        ]
      }
    },
    {
      "route": "/api/list-refunds",
      "type": "reference",
      "title": "List refunds",
      "description": "GET /refunds",
      "headings": [],
      "plainText": "Use this method to return a paginated list of refunds. Note: If you want to view the details of a specific refund and you have its refundId, use our Retrieve Refund method. Use query parameters to filter the list of results that we return, for example, to search for refunds for a customer, a tender type, or a date range. Our gateway returns the following information about each refund in the list: Order details, including the refund amount and when we processed the refund. Payment card details, including the masked card number, expiry date, and payment method. Cardholder details, including their contact information and shipping address. For referenced refunds, our gateway also returns details about the payment that the refund is linked to.",
      "refs": {
        "workflowIds": [
          "adjust-a-refund",
          "reverse-a-refund"
        ],
        "operationIds": [
          "listRefunds"
        ]
      }
    },
    {
      "route": "/api/list-secure-tokens",
      "type": "reference",
      "title": "List secure tokens",
      "description": "GET /processing-terminals/{processingTerminalId}/secure-tokens",
      "headings": [],
      "plainText": "Use this method to return a paginated list of secure tokens. Note: If you want to view the details of a specific secure token and you have its secureTokenId, use our Retrieve Secure Token method. Use query parameters to filter the list of results that we return, for example, to search for secure tokens by customer or by the first four digits of a card number. Our gateway returns information about the following for each secure token in the list: Payment details that the secure token represents. Customer details, including shipping and billing addresses. Secure token that you can use to carry out transactions. For each secure token, we also return the secureTokenId, which you can use to perform follow-on actions.",
      "refs": {
        "workflowIds": [
          "delete-a-saved-payment-method",
          "refresh-a-saved-payment-method",
          "update-a-saved-payment-method"
        ],
        "operationIds": [
          "listSecureTokens"
        ]
      }
    },
    {
      "route": "/api/list-subscriptions",
      "type": "reference",
      "title": "List subscriptions",
      "description": "GET /processing-terminals/{processingTerminalId}/subscriptions",
      "headings": [],
      "plainText": "Use this method to return a paginated list of subscriptions. Note: If you want to view the details of a specific subscription and you have its subscriptionId, use our Retrieve subscription method. Use query parameters to filter the list of results that we return, for example, to search for subscriptions for a customer, a payment plan, or frequency. Our gateway returns information about the following for each subscription in the list: Payment plan the subscription is linked to. Secure token that represents cardholder’s payment details. Current state of the subscription, including its status, next due date, and invoices. Fees for setup and the cost of the recurring order. Subscription length, end date, and frequency. For each subscription, we also return the subscriptionId, the paymentPlanId, and the secureTokenId, which you can use to perform follow-actions.",
      "refs": {
        "workflowIds": [
          "manage-subscriptions"
        ],
        "operationIds": [
          "listSubscriptions"
        ]
      }
    },
    {
      "route": "/api/metadata",
      "type": "guide",
      "title": "Metadata",
      "description": "Guide to using metadata in the Payroc API — attaching custom key-value pairs to resources for auditing, troubleshooting, and third-party system integration.",
      "headings": [
        "What we do with metadata",
        "Metadata best practices",
        "How to add metadata to your request",
        "Worked example 1 - single resource in a request",
        "Request",
        "Request",
        "Worked example 2 - multiple resources in one request",
        "Request",
        "Request"
      ],
      "plainText": "Metadata is a feature of our API that you can use to attach additional information to a resource without changing how the resource behaves. You can use metadata to store small pieces of contextual data that aren't part of the standard API fields, for example, who created the resource or how it maps to your internal systems. Send your metadata as a set of key-value pairs for your own reference, auditing, or troubleshooting. When you retrieve a resource with attached metadata, we echo back the information exactly as you provided it. What we do with metadata We don't consume metadata or use it for any internal purposes, but we do: Validate its structure to make sure that it contains key-value pairs. Encrypt it and store it with the resource that you link it to. Return it when you retrieve the resource that it's attached to. Metadata best practices Important: Never send sensitive information in metadata, for example, customer information, payment card details, or API keys. Apply the following best practices when you add metadata to your requests: Use unique key names. Always validate your integration. If you send metadata in the wrong format, we reject the whole request and return a 400 error. Never display metadata in a customer-facing user interface. How to add metadata to your request If you send a request that supports metadata, send the metadata object with a series of key-value pairs. You should be aware of the following constraints: You can send up to 20 unique key-value pairs. We accept keys that are String format with a maximum of 50 characters. We accept values that are String format with a maximum of 1024 characters. You can't send nested JSON objects. Some requests support adding metadata to more than one resource. Our worked examples below cover how to add metadata to one resource in a request, and also how to add metadata to two resources in one request. Worked example 1 - single resource in a request I’m integrating against the Create Event Subscription m",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createEventSubscription",
          "createInstruction"
        ]
      }
    },
    {
      "route": "/api/pagination",
      "type": "guide",
      "title": "Pagination",
      "description": "How to use cursor-based pagination with the Payroc API, including request parameters, response fields, and navigating pages of results.",
      "headings": [
        "Request parameters",
        "Example request",
        "Response fields",
        "Example response"
      ],
      "plainText": "Pagination is a feature of our API that you can use to handle responses that contain large datasets, for example, when you retrieve a list of payments. Instead of returning all the results in one response, we separate the results into pages and return a page for each request. You can then send follow-up requests to retrieve the other pages. Request parameters If a method supports pagination, you can use the following query parameters to tailor your results: before - Return results that are before the value that you specify. You can't use the before parameter in the same request as the after parameter. after - Return results that are after the value that you specify. You can't use the after parameter in the same request as the before parameter. limit - Specify the maximum number of results we return for each page. If you don't include a limit parameter, we return a maximum of 10 results for each page. Note: To retrieve the first page of results, don't include a before parameter or an after parameter in your request. Example request The following example is a request to our List Contacts method. The request limits the results for each page to two results: curl -G https://api.payroc.com/v1/processing-accounts/38765/contacts \\ -H \"Authorization: Bearer <token>\" \\ -d limit=2 Response fields We return the following fields in the response: limit - Maximum number of results that a page can contain. count - Number of results that we returned in the page. hasMore - Boolean that indicates if there are more results available. If the value is false, you have reached the last page of results. data - Array that contains your results. links - HATEOAS object that contains information about how to navigate to additional pages of results. The object contains the following fields: rel - Relationship of the link to the current page. The value is one of the following:next - Next page of results. previous – Previous page of results. method - HTTP method that you use to retrieve the next p",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "listProcessingAccountContacts"
        ]
      }
    },
    {
      "route": "/api/patch-event-subscription",
      "type": "reference",
      "title": "Partially update event subscription",
      "description": "PATCH /event-subscriptions/{subscriptionId}",
      "headings": [],
      "plainText": "Use this method to partially update an event subscription. Structure your request to follow the RFC 6902 standard. To update an event subscription, you need its subscriptionId. Our gateway returned the subscriptionId in the id field in the response of the Create Event Subscription method. Note: If you don't have the subscriptionId, use our List Event Subscriptions method to search for the subscription. You can update the following properties of an event subscription: eventTypes - Subscribe to new events or remove events that you are subscribed to. notifications - Information about your endpoint and who we email if we can't contact your endpoint. enabled - Turn on or turn off notifications for the subscription.",
      "refs": {
        "workflowIds": [
          "patch-an-event-subscription"
        ],
        "operationIds": [
          "patchEventSubscription"
        ]
      }
    },
    {
      "route": "/api/patch-pricing-intent",
      "type": "reference",
      "title": "Partially update pricing intent",
      "description": "PATCH /pricing-intents/{pricingIntentId}",
      "headings": [],
      "plainText": "Use this method to partially update a pricing intent. Structure your request to follow the RFC 6902 standard. If you update a pricing intent, it won't affect merchants you've previously onboarded. To update a pricing intent, you need its pricingIntentId. Our gateway returned the pricingIntentId in the response of the Create Pricing Intent method. Note: If you don't have the pricingIntentId, use our List Pricing Intents method to search for the pricing intent. You can update the following details about a pricing intent: Fees, including the base fees, processor fees, and gateway fees. Custom name for the pricing intent. Additional services that merchants can sign up for.",
      "refs": {
        "workflowIds": [
          "patch-a-pricing-intent"
        ],
        "operationIds": [
          "patchPricingIntent"
        ]
      }
    },
    {
      "route": "/api/pay-subscription",
      "type": "reference",
      "title": "Pay manual subscription",
      "description": "POST /processing-terminals/{processingTerminalId}/subscriptions/{subscriptionId}/pay",
      "headings": [],
      "plainText": "Use this method to manually collect a payment linked to a subscription. You can manually collect a payment only if the merchant chose not to let our gateway automatically collect each payment. To manually collect a payment, you need the subscriptionId of the subscription that's linked to the payment. You sent the subscriptionId in the request of the Create Subscription method. Note: If you don't have the subscriptionId, use our List Subscriptions method to search for the subscription. The request includes an order object that contains information about the amount that you want to collect. In the response, our gateway returns information about the payment and a paymentId. You can use the paymentId in follow-on actions with the Payments endpoints or Bank Transfer Payments endpoints.",
      "refs": {
        "workflowIds": [
          "manage-subscriptions"
        ],
        "operationIds": [
          "paySubscription"
        ]
      }
    },
    {
      "route": "/api/payment",
      "type": "reference",
      "title": "Create payment",
      "description": "POST /payments",
      "headings": [],
      "plainText": "Use this method to run a sale or a pre-authorization with a customer's payment card. In the response, our gateway returns information about the card payment and a paymentId, which you need for the following methods: Retrieve payment - View the details of the card payment. Adjust payment - Update the details of the card payment. Capture payment - Capture the pre-authorization. Reverse payment - Cancel the card payment if it's in an open batch. Refund payment - Run a referenced refund to return funds to the payment card. Payment methods Cards - Credit, debit, and EBT Digital wallets - Apple Pay® and Google Pay® Tokens - Secure tokens and single-use tokens Features Our Create Payment method also supports the following features: Repeat payments - Run multiple payments as part of a payment schedule that you manage with your own software. Offline sales - Run a sale or a pre-authorization if the terminal loses its connection to our gateway. Tokenization - Save card details to use in future transactions. 3-D Secure - Verify the identity of the cardholder. Custom fields - Add your own data to a payment. Tips - Add tips to the card payment. Taxes - Add local taxes to the card payment. Surcharging - Add a surcharge to the card payment. Dual pricing - Offer different prices based on payment method, for example, if you use our RewardPay Choice pricing program. Healthcare - Accept payments from Health Savings Accounts (HSA) and Flexible Spending Accounts (FSA).",
      "refs": {
        "workflowIds": [
          "accept-apple-pay",
          "accept-google-pay",
          "collect-with-hosted-fields",
          "pay-with-single-use-token",
          "run-a-card-sale",
          "run-a-pre-authorization"
        ],
        "operationIds": [
          "payment"
        ]
      }
    },
    {
      "route": "/api/postman-collection",
      "type": "guide",
      "title": "Postman Collection",
      "description": "Step-by-step guide to setting up and authorizing the Payroc Postman collection for testing API requests.",
      "headings": [
        "Create a Postman API key",
        "Copy our repository",
        "Authorize your requests"
      ],
      "plainText": "Important: Before you begin, contact our Sales Team to set up your Payroc account and to get your API key. To use our Postman collection, you need to: Create a Postman API key. Clone our repository. Authorize your requests. Create a Postman API key Go to https://postman.co/settings/me/api-keys. Postman might prompt you to sign in. Select Generate API Key. In the Name your key field, enter Payroc-API, and then select Generate API Key. Copy and save your Postman API key. Copy our repository Go to https://github.com/payroc/api-postman-collections. Go to Releases and download the zip file. Extract the contents of the file. Open a PowerShell terminal, and then run the Setup.ps1 script in the terminal. In the PowerShell terminal, the script prompts you to enter your Postman API key and then enter your Payroc API Key. Note: If you get the error Setup.ps1 cannot be loaded because running scripts is disabled on this system, it means that you don't have permission to run this script. To bypass this issue, use: powershell -ExecutionPolicy Bypass -File .\\Setup.ps1 Authorize your requests To automatically populate each request with a bearer token, complete the following steps: Launch the Postman application. From the Workspaces dropdown menu, select Payroc-API. Select Collections, and then select Payroc Identity Service, and then select the Authorize request. Authorize request From the Environment dropdown menu, select Payroc-UAT. Payroc UAT To send the Authorize request, select Send. Note: If your token expires, send the Authorize request again.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/api/reactivate-subscription",
      "type": "reference",
      "title": "Re-activate subscription",
      "description": "POST /processing-terminals/{processingTerminalId}/subscriptions/{subscriptionId}/reactivate",
      "headings": [],
      "plainText": "Use this method to reactivate a subscription. To reactivate a subscription, you need its subscriptionId, which you sent in the request of the Create Subscription method. Note: If you don't have the subscriptionId, use our List Subscriptions method to search for the subscription. If your request is successful, our gateway restarts taking payments from the customer. To deactivate the subscription, use our Deactivate Subscription method.",
      "refs": {
        "workflowIds": [
          "reactivate-a-subscription"
        ],
        "operationIds": [
          "reactivateSubscription"
        ]
      }
    },
    {
      "route": "/api/refund-bank-transfer-payment",
      "type": "reference",
      "title": "Create referenced refund",
      "description": "POST /bank-transfer-payments/{paymentId}/refund",
      "headings": [],
      "plainText": "Use this method to refund a bank transfer payment that is in a closed batch. To refund a bank transfer payment, you need its paymentId. Our gateway returned the paymentId in the response of the Create Payment method. Note: If you don’t have the paymentId, use our List Payments method to search for the bank transfer payment. If your refund is successful, our gateway returns the payment amount to the customer's account. Things to consider If the merchant refunds a bank transfer payment that is in an open batch, our gateway reverses the bank transfer payment. Some merchants can run unreferenced refunds, which means that they don’t need a paymentId to return an amount to a customer. For more information about how to run an unreferenced refund, go to Create Refund .",
      "refs": {
        "workflowIds": [
          "refund-a-bank-transfer-payment"
        ],
        "operationIds": [
          "refundBankTransferPayment"
        ]
      }
    },
    {
      "route": "/api/refund-payment",
      "type": "reference",
      "title": "Create referenced refund",
      "description": "POST /payments/{paymentId}/refund",
      "headings": [],
      "plainText": "Use this method to refund a payment that is in a closed batch. To refund a payment, you need its paymentId. Our gateway returned the paymentId in the response of the Create Payment method. Note: If you don't have the paymentId, use our List Payments method to search for the payment. If your refund is successful, our gateway returns the payment amount to the cardholder's account. Things to consider If the merchant refunds a payment that is in an open batch, our gateway reverses the payment. Some merchants can run unreferenced refunds, which means that they don't need a paymentId to return an amount to a customer. For more information about how to run an unreferenced refund, go to Create Refund .",
      "refs": {
        "workflowIds": [
          "refund-a-card-payment",
          "run-a-pre-authorization"
        ],
        "operationIds": [
          "refundPayment"
        ]
      }
    },
    {
      "route": "/api/represent-bank-transfer-payment",
      "type": "reference",
      "title": "Re-present payment",
      "description": "POST /bank-transfer-payments/{paymentId}/represent",
      "headings": [],
      "plainText": "Use this method to re-present an ACH payment. To re-present a payment, you need the paymentId of the return. To get the paymentId of the return, complete the following steps: Use our Retrieve Payment method to view the details of the original payment. From the returns object in the response, get the paymentId of the return. Our gateway uses the bank account details from the original payment. If you want to update the customer's bank account details, send the new bank account details in the request. If your request is successful, our gateway re-presents the payment.",
      "refs": {
        "workflowIds": [
          "represent-ach-payment"
        ],
        "operationIds": [
          "representBankTransferPayment"
        ]
      }
    },
    {
      "route": "/api/resources",
      "type": "guide",
      "title": "API resources",
      "description": "Authored introductions to resources in the canonical payment API.",
      "headings": [],
      "plainText": "Authored introductions to resources in the canonical payment API. Bank transfer payments Bank transfer refunds Card Payments Card payment refunds Contacts Event Subscriptions Funding Accounts Funding Activity Funding Instructions Funding Recipients Merchant Platforms Owners Payment Features - Cards Payment Links Payroc Cloud Pricing Intents Processing accounts Processing terminals Payment Plans Subscriptions Secure tokens",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/api/resources/bank-transfer-payments",
      "type": "guide",
      "title": "Bank transfer payments",
      "description": "Reference for the bank transfer payment endpoints, covering how to create, retrieve, list, and re-present payments taken from a customer's bank account.",
      "headings": [
        "Retrieve the details of the transaction",
        "Re-present the transaction",
        "Close the transaction"
      ],
      "plainText": "Use our Bank Transfer Payments endpoints to take payments from a customer’s bank account. Integrate with our Create Payment method to run a sale. When you send a successful request, our gateway returns a paymentId for the transaction, which you can use to: Retrieve the details of the transaction Integrate with our Retrieve Payment method to view transaction details for a specific transaction, such as the order information, the bank account details, and the transaction result. Integrate with our List Payments method to return a paginated list of transactions that meet specific query parameters. Re-present the transaction Integrate with our Re-present Payment method to resubmit a declined transaction. Close the transaction Integrate with our Close Return method to close a returned transaction without re-presenting it.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "bankTransferPayment",
          "closeBankTransferPayment",
          "getBankTransferPayment",
          "listBankTransferPayments",
          "representBankTransferPayment"
        ]
      }
    },
    {
      "route": "/api/resources/bank-transfer-refunds",
      "type": "guide",
      "title": "Bank transfer refunds",
      "description": "Reference for the bank transfer refund endpoints, covering how to reverse, refund, retrieve, list, and reverse refunds for bank transfer payments.",
      "headings": [
        "Reverse or refund a payment",
        "Retrieve the details of the refund",
        "Reverse the refund"
      ],
      "plainText": "Use our Bank Transfer Refunds endpoints to reverse or refund a payment and manage refunds. Reverse or refund a payment We have three methods to reverse or refund a payment: If the payment is in an open batch, the merchant must cancel the payment. To cancel a payment, integrate with our Reverse Payment method. If the payment is in a closed batch and the merchant has the paymentId of the payment, the merchant must refund the payment. To refund a payment, integrate with our Create Referenced Refund method. If the payment is in a closed batch and the merchant doesn’t have the paymentId of the payment, the merchant must run an unreferenced refund. To run an unreferenced refund, integrate with our Create Unreferenced Refund method. Note: If the merchant refunds a payment in an open batch, our gateway treats the payment as a reversal and cancels it. Retrieve the details of the refund Integrate with our Retrieve Refund method to view the details of a refund, such as the refund amount, the bank account details, and the transaction result. Integrate with our List Refunds method to return a paginated list of refunds that meet specific query parameters. Reverse the refund Integrate with our Reverse Refund method to cancel a refund if it’s in an open batch.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "bankTransferUnreferencedRefund",
          "getBankTransferRefund",
          "listBankTransferRefunds",
          "refundBankTransferPayment",
          "reverseBankTransferPayment",
          "reverseBankTransferRefund"
        ]
      }
    },
    {
      "route": "/api/resources/card-payments",
      "type": "guide",
      "title": "Card Payments",
      "description": "Reference for the card payment endpoints, covering how to create, retrieve, list, adjust, and capture payments taken from a card.",
      "headings": [
        "Retrieve the details of the transaction",
        "Adjust the details of the transaction",
        "Capture the transaction"
      ],
      "plainText": "Use our Payments endpoints to take payments from a card in card-present environments, e‑Commerce environments, or MOTO environments. Integrate with our Create Payment method to run a sale or a pre-authorization . When you send a successful request, our gateway returns a paymentId for the transaction, which you can use to: Retrieve the details of the transaction Integrate with our Retrieve Payment method to view transaction details for a specific transaction, such as the order information, the payment card details, and the transaction result. Integrate with our List Payments method to return a paginated list of transactions that meet specific query parameters. Adjust the details of the transaction Integrate with our Adjust Payment method to change the following details of a transaction: Order amount and tip amount Status of the transaction Cardholder’s shipping address and contact information Cardholder’s signature Capture the transaction Integrate with our Capture Payment method to capture a pre-authorization. Note: To capture more than the pre-authorization amount, we recommend that the merchant adjusts the pre-authorization amount before they capture it. To do this, we recommend that you integrate with our Adjust Payment method.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "adjustPayment",
          "capturePayment",
          "getPayment",
          "listPayments",
          "payment"
        ]
      }
    },
    {
      "route": "/api/resources/card-refunds",
      "type": "guide",
      "title": "Card payment refunds",
      "description": "Reference for the card refund endpoints, covering how to reverse, refund, retrieve, list, adjust, and reverse refunds for card transactions.",
      "headings": [
        "Reverse or refund a transaction",
        "Retrieve the details of the refund",
        "Adjust the refund",
        "Reverse the refund"
      ],
      "plainText": "Use our Card Refunds endpoints to reverse or refund a transaction and manage refunds. Reverse or refund a transaction We have three methods to reverse or refund a transaction: If the transaction is in an open batch, the merchant must cancel the transaction. To cancel a transaction, integrate with our Reverse Payment method. If the transaction is in a closed batch and the merchant has the paymentId of the transaction, the merchant must refund the transaction. To refund a transaction, integrate with our Create Referenced Refund method. If the transaction is in a closed batch and the merchant doesn't have the paymentId of the transaction, the merchant must run an unreferenced refund. To run an unreferenced refund, integrate with our Create Unreferenced Refund method. Note: If the merchant refunds a transaction in an open batch, our gateway treats the transaction as a reversal and cancels it. Retrieve the details of the refund Integrate with our Retrieve Refund method to view the details of a refund, such as the refund amount, the payment card details, and the status of the refund. Integrate with our List Refunds method to return a paginated list of refunds that meet specific query parameters. Adjust the refund Integrate with our Adjust Refund method to update the details of a refund, such as customer details and the status of the refund. Reverse the refund Integrate with our Reverse Refund method to cancel a refund if it's in an open batch.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "adjustRefund",
          "getRefund",
          "listRefunds",
          "refundPayment",
          "reversePayment",
          "reverseRefund",
          "unreferencedRefund"
        ]
      }
    },
    {
      "route": "/api/resources/cards",
      "type": "guide",
      "title": "Payment Features - Cards",
      "description": "Reference for the card payment feature endpoints, covering how to verify a card, view an EBT balance, look up BIN information, and check DCC eligibility.",
      "headings": [
        "Verify a card",
        "View EBT balance",
        "Look up BIN information",
        "Verify a card's DCC eligibility"
      ],
      "plainText": "Use our Cards endpoints to check if a card is valid and has available balance, or to check if a card is eligible for Dynamic Currency Conversion (DCC) . Verify a card Integrate with our Verify Card method to check if the details of a payment card are correct and that you can run transactions with the payment card. View EBT balance Integrate with our View EBT Balance method to view the balance on an EBT card. Look up BIN information Integrate with our Look Up BIN Information method to view the details of a payment card, including the currency of the card and if the card is eligible for surcharging. Verify a card's DCC eligibility Integrate with our Verify DCC Eligibility method to check if a payment card is eligible for DCC, and to provide the conversion rates that the merchant can offer the customer.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "balanceCard",
          "binLookup",
          "getFxRates",
          "verifyCard"
        ]
      }
    },
    {
      "route": "/api/resources/contacts",
      "type": "guide",
      "title": "Contacts",
      "description": "Reference for the contact endpoints, covering how to retrieve, update, and delete a contact linked to a processing account.",
      "headings": [
        "Retrieve the details of a contact",
        "Update the details of a contact",
        "Delete a contact"
      ],
      "plainText": "Use our Contacts endpoints to retrieve, update, or delete a contact associated with a processing account. Retrieve the details of a contact Integrate with our Retrieve Contact method to view the details of a contact, such as their name, contact details, and role within the business. Update the details of a contact Integrate with our Update Contact method to update the details of a contact, such as their name, contact details, and role within the business. Delete a contact Integrate with our Delete Contact method to delete a contact.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "deleteContact",
          "getContact",
          "updateContact"
        ]
      }
    },
    {
      "route": "/api/resources/event-subscriptions",
      "type": "guide",
      "title": "Event Subscriptions",
      "description": "Reference for the event subscription endpoints, covering how to create, retrieve, list, update, and delete subscriptions that send you notifications when a resource changes.",
      "headings": [],
      "plainText": "Use our Event Subscriptions endpoints to create and manage the events you have subscribed to. We trigger an event when we make a change to a resource or complete a process, for example, when we change the status of a processing account. When you subscribe to an event, we send you a notification each time we trigger the event. Integrate with our Create Event Subscription method to subscribe to an event. When you send a successful request our gateway returns an id for the subscription, which you use to complete follow-on actions: Retrieve Event Subscription - View the details of the event subscription. If you don't have the subscriptionId, use our List Event Subscriptions method. Update Event Subscription - Update the details of the event subscription, including the events that you have subscribed to. You can also partially update the event subscription. Delete Event Subscription - Delete the event subscription. Note: When you create an event subscription, we return a unique identifier for the event subscription in the id field. Send this unique identifier in your requests when we require a subscriptionId.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createEventSubscription",
          "deleteEventSubscription",
          "getEventSubscription",
          "listEventSubscriptions",
          "patchEventSubscription",
          "updateEventSubscription"
        ]
      }
    },
    {
      "route": "/api/resources/funding-accounts",
      "type": "guide",
      "title": "Funding Accounts",
      "description": "Reference for the funding account endpoints, covering how to retrieve, list, update, and delete funding accounts linked to processing accounts and funding recipients.",
      "headings": [
        "Retrieve information about a funding account",
        "Update the details of a funding account",
        "Delete a funding account"
      ],
      "plainText": "Use our Funding Accounts endpoints to manage funding accounts associated with processing accounts and funding recipients. Retrieve information about a funding account Integrate with our Retrieve Funding Account method to retrieve information about a specific funding account. Integrate with our List Funding Accounts method to return a list of all funding accounts associated with your account. Update the details of a funding account Integrate with our Update Funding Account method to make changes to a funding account that is associated with a funding recipient. Delete a funding account Integrate with our Delete Funding Account method to delete a funding account that is associated with a funding recipient.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "deleteFundingAccount",
          "getFundingAccount",
          "listFundingAccount",
          "updateFundingAccount"
        ]
      }
    },
    {
      "route": "/api/resources/funding-activity",
      "type": "guide",
      "title": "Funding Activity",
      "description": "Reference for the funding activity endpoints, covering how to list funding balances and funding activity for merchants linked to your account.",
      "headings": [
        "List Funding Balances",
        "List Funding Activity"
      ],
      "plainText": "Use our Funding Activity endpoints to retrieve funding information for the merchants that are linked to your account. List Funding Balances Integrate with our List Funding Balances method to return a paginated list of funding balances available for each merchant linked to your account. List Funding Activity Integrate with our List Funding Activity method to return a list of funding activities within a specific date range.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "getFundingActivity",
          "getFundingBalance"
        ]
      }
    },
    {
      "route": "/api/resources/funding-instructions",
      "type": "guide",
      "title": "Funding Instructions",
      "description": "Reference for the funding instruction endpoints, covering how to create, retrieve, list, update, and delete instructions that tell us how to distribute funds to your merchants.",
      "headings": [
        "Retrieve the details of a funding instruction",
        "Update the details of a funding instruction",
        "Delete a funding instruction"
      ],
      "plainText": "Use our Funding Instructions endpoints to manage funding instructions , which tell us how to distribute the funding balance from your merchants' transactions. Integrate with our Create Funding Instruction method to send funds to your merchants. When you send a successful request, our gateway returns an instructionId for the funding instruction, which you can use to: Retrieve the details of a funding instruction Integrate with our Retrieve Funding Instruction method to retrieve the details of a specific funding instruction. Integrate with our List Funding Instructions method to return a paginated list of funding instructions that we received within a specific date range. Update the details of a funding instruction Integrate with our Update Funding Instruction method to make changes to a funding instruction that we haven't yet processed. Delete a funding instruction Integrate with our Delete Funding Instruction method to delete a funding instruction that we haven't yet processed.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createInstruction",
          "deleteInstructions",
          "getInstruction",
          "listInstructions",
          "updateInstructions"
        ]
      }
    },
    {
      "route": "/api/resources/funding-recipients",
      "type": "guide",
      "title": "Funding Recipients",
      "description": "Reference for the funding recipient endpoints, covering how to create, retrieve, list, update, and delete a funding recipient along with its accounts and owners.",
      "headings": [
        "Retrieve information about the funding recipient",
        "Add a funding account or an owner to a funding recipient",
        "Update a funding recipient",
        "Delete a funding recipient"
      ],
      "plainText": "Use our Funding Recipient endpoints to create and manage funding recipients , including their accounts and owners. Note: You can use our API to manage owners and funding accounts associated with a funding recipient. For more information about owners and funding accounts, go to Owners overview or our Funding Accounts methods. Integrate with our Create Funding Recipient method to send us information about the funding recipient, including its funding accounts and owners. When you send a successful request, our gateway returns a recipientId for the funding recipient, which you can use to: Retrieve information about the funding recipient Integrate with our Retrieve Funding Recipient method to view the details of a specific funding recipient, such as its funding accounts, owners, and contact details. Integrate with our List Funding Recipients method to return a paginated list of funding recipients linked to your account. Integrate with our List Funding Accounts method to view the funding accounts linked to the funding recipient. Integrate with our List Funding Recipient Owners method to view the owners associated with the funding recipient. Add a funding account or an owner to a funding recipient Integrate with our Create Funding Account method to create a funding account and link it to the funding recipient. Integrate with our Create Funding Recipient Owner method to create an owner and associate them with the funding recipient. Update a funding recipient Integrate with our Update Funding Recipient method to update the details for a funding recipient, for example, its address or contact methods. Delete a funding recipient Integrate with our Delete Funding Recipient method to delete the funding recipient, including its funding accounts and owners.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createFundRecipientFundingAccount",
          "createFundRecipientOwner",
          "createFundingRecipient",
          "deleteFundingRecipient",
          "getFundingRecipient",
          "listFundRecipientFundingAccounts",
          "listFundRecipientOwners",
          "listFundingAccount",
          "listFundingRecipients",
          "updateFundingRecipient"
        ]
      }
    },
    {
      "route": "/api/resources/merchant-platforms",
      "type": "guide",
      "title": "Merchant Platforms",
      "description": "Reference for the merchant platform endpoints, covering how to create and retrieve a merchant platform, and how to list and add its processing accounts.",
      "headings": [
        "Retrieve information about a merchant platform",
        "List the processing accounts of a merchant platform",
        "Add a processing account to a merchant platform"
      ],
      "plainText": "Use our Merchant Platform endpoints to board a merchant. Integrate with our Create Merchant Platform method to send us information about the merchant's business and its processing accounts. Note: If the merchant's business expands after you board them, use our Create Processing Account method to add additional processing accounts and their contacts. When you send a successful request, we review the merchant's information. After we complete our review and approve the merchant, we assign a merchantPlatformId, which you can use to: Retrieve information about a merchant platform Integrate with our Retrieve Merchant Platform method to retrieve information about a merchant platform and its processing accounts. Integrate with our List Merchant Platforms method to return a paginated list of merchant platforms linked to your ISV account. List the processing accounts of a merchant platform Integrate with our List Merchant Platform's Processing Accounts method to return a paginated list of processing accounts linked to a merchant platform. Add a processing account to a merchant platform Integrate with our Create Processing Account method to add a processing account to a merchant platform.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createMerchant",
          "createProcessingAccount",
          "getMerchantAccounts",
          "listMerchantLocations",
          "listMerchantPlatforms"
        ]
      }
    },
    {
      "route": "/api/resources/owners",
      "type": "guide",
      "title": "Owners",
      "description": "Reference for the owner endpoints, covering how to retrieve, update, and delete an owner of a processing account or a funding recipient.",
      "headings": [
        "Retrieve the details of an owner",
        "Update the details of an owner",
        "Delete an owner"
      ],
      "plainText": "Use our Owners endpoints to retrieve, update, or delete an owner. In our API, there are two types of owners: Owner of a processing account - An individual who owns the relationship between Payroc and the processing account. Use our Create Merchant Platform method or our Create Processing Account method to add an owner to a processing account. Owner of a funding recipient - An individual who is associated with the funding recipient. Use our Create Funding Recipient method or our Create Funding Recipient Owner method to add an owner to a funding recipient. Our gateway assigns an ownerId to each owner, which you can use to: Retrieve the details of an owner Integrate with our Retrieve Owner method to view the details of an owner, such as their name, address, and contact details. Update the details of an owner Important: You can't update the details of an owner of a processing account. Integrate with our Update Owner method to update the details of an owner, such as their name, address, and contact details. Delete an owner Important: You can't delete an owner of a processing account. Integrate with our Delete Owner method to delete an owner from a funding recipient.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createFundRecipientOwner",
          "createFundingRecipient",
          "createMerchant",
          "createProcessingAccount",
          "deleteOwner",
          "getOwner",
          "updateOwner"
        ]
      }
    },
    {
      "route": "/api/resources/payment-links",
      "type": "guide",
      "title": "Payment Links",
      "description": "Reference for the payment link endpoints, covering how to create, share, update, retrieve, list, and deactivate a payment link that a customer uses to pay for goods or services.",
      "headings": [],
      "plainText": "Use our Payment Links endpoints to create a payment link that a merchant can share with a customer. The customer then uses the link to open a payment page that they use to pay for goods or services. Integrate with our Create Payment Link method to create and configure a payment link. When our gateway receives a successful request, it creates a payment link and returns a paymentLinkId that you use to complete follow-on actions: Share a link - Email a payment link to one or more customers. Update a link - Update a payment link, for example, its expiration date. Retrieve a link - Retrieve the details of a payment link. List payment links - Retrieve a paginated list of payment links for a processing terminal. List a link's sharing events - Retrieve a paginated list of the times a merchant has shared a payment link. Deactivate a link - Deactivate a payment link. Note: If a customer has made a payment using a payment link, you can use our Card Payments endpoints or our Bank Transfer Payments endpoints to manage the payment.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createPaymentLink",
          "deactivatePaymentLink",
          "listPaymentLinkShareEvents",
          "listPaymentLinks",
          "retrievePaymentLink",
          "sharePaymentLink",
          "updatePaymentLink"
        ]
      }
    },
    {
      "route": "/api/resources/payment-plans",
      "type": "guide",
      "title": "Payment Plans",
      "description": "Reference for the payment plan endpoints, covering how to create, retrieve, list, update, and delete a schedule that defines how often and how much a gateway collects.",
      "headings": [],
      "plainText": "Important: Our solution for repeat payments is very flexible and uses the Payment Plans, Secure Tokens, and Subscriptions endpoints. To help you understand how it works, we recommend that you go to Repeat Payments. Use our Payment Plans endpoints to create payment schedules that you can later assign customers to using our Subscriptions endpoints. A payment plan includes information about: How often our gateway collects a payment. How many payments our gateway collects. How much our gateway collects for each payment. When you create a payment plan, you generate and include a paymentPlanId that you use to complete follow-on actions: Retrieve the payment plan - View the details of a payment plan. If you don't have the paymentPlanId you can use our List Payment Plans method. Update the payment plan - Update the details of a payment plan, including the frequency or amount. Delete the payment plan - Delete the payment plan. After you create the payment plan, use the Subscriptions endpoint to assign customers to the payment plan.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createPaymentPlan",
          "deletePaymentPlan",
          "getPaymentPlan",
          "listPaymentPlans",
          "updatePaymentPlan"
        ]
      }
    },
    {
      "route": "/api/resources/payroc-cloud",
      "type": "guide",
      "title": "Payroc Cloud",
      "description": "Reference for the Payroc Cloud endpoints, covering how to submit, retrieve, and cancel payment, refund, and signature instructions, and how to read a closed-loop card.",
      "headings": [],
      "plainText": "Important: Our Payroc Cloud endpoints are part of a larger Payroc Cloud solution. To help you understand how it works, go to Payroc Cloud. Use our Payroc Cloud endpoints to submit instructions to a payment device. You can use Payroc Cloud to: Take a payment - Initiate, retrieve, and cancel a payment instruction. Run a refund - Initiate, retrieve, and cancel a refund instruction. Capture a signature - Initiate, retrieve, and cancel a signature instruction. Read a closed-loop card - Retrieve the details of a closed-loop card .",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "deletePaymentInstruction",
          "deleteRefundInstruction",
          "deleteSignatureInstruction",
          "getClosedLoop",
          "getPaymentInstruction",
          "getRefundInstruction",
          "getSignatureInstruction",
          "sendPaymentInstruction",
          "sendRefundInstruction",
          "sendSignatureInstruction"
        ]
      }
    },
    {
      "route": "/api/resources/pricing-intents",
      "type": "guide",
      "title": "Pricing Intents",
      "description": "Reference for the pricing intent endpoints, covering how to create, retrieve, list, update, and delete a template of fees assigned to a processing account.",
      "headings": [],
      "plainText": "Use our Pricing Intents endpoints to create a template of fees that you can assign to a processing account. You can create a pricing intent for each processing account, or you can assign a processing account to a pricing intent that you have already created. Note: Before you board a merchant, they must sign a Merchant Processing Agreement (MPA) that describes the fees that they have agreed to pay. Use the information from the MPA to populate the fees in the pricing intent. Use our Create Pricing Intent method to create a pricing intent. When you send a successful request, our gateway returns the id for the pricing intent, which you can use to: Retrieve Pricing Intent - View the details of the pricing intent. If you don't have the id for the pricing intent, use our List Pricing Intents method. Update Pricing Intent - Update the details of the pricing intent, including fees and the custom name of the pricing intent. You can also partially update the pricing intent. Delete Pricing Intent - Delete the pricing intent.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createPricingIntent",
          "deletePricingIntent",
          "getPricingIntent",
          "listPricingIntents",
          "patchPricingIntent",
          "updatePricingIntent"
        ]
      }
    },
    {
      "route": "/api/resources/processing-accounts",
      "type": "guide",
      "title": "Processing accounts",
      "description": "Reference for the processing account endpoints, covering how to retrieve account details, pricing agreements, funding accounts, owners, contacts, and terminal orders.",
      "headings": [
        "Retrieve processing account",
        "Get processing account pricing agreement",
        "Create reminder for processing account",
        "List processing account's funding accounts",
        "List owners",
        "List contacts",
        "List processing terminals",
        "Create terminal orders",
        "List terminal orders",
        "Upload attachment to processing account"
      ],
      "plainText": "Important: You can’t use the Processing Accounts endpoint to add a processing account to a merchant platform. To add a processing account, you need to use the Create Processing Account method in our Merchant Platforms endpoint. Use our Processing Accounts endpoints to retrieve information about a merchant’s processing accounts and terminal orders . You can also use the processing accounts endpoint to send a reminder to a merchant to sign their processing agreement. Retrieve processing account Integrate with our Retrieve Processing Account method to retrieve information associated with a specific processing account, including: Doing Business As (DBA) name Merchant Category code (MCC) Pricing agreement Funding accounts Get processing account pricing agreement Integrate with our Get Processing Account Pricing Agreement method to retrieve information about the pricing structure that the merchant signed up for when we created the processing account. Create reminder for processing account Integrate with our Create Reminder for Processing Account method to send an email reminder to a merchant if they have not yet signed their pricing agreement. List processing account's funding accounts Integrate with our List Processing Account’s Funding Accounts method to retrieve the funding accounts that are linked to a processing account. List owners Integrate with our List Owners method to retrieve the owner or owners of a processing account. List contacts Integrate with our List Contacts method to retrieve a list of contacts associated with the processing account. List processing terminals Integrate with our List Processing Terminals method to retrieve a list of all processing terminals associated with a processing account. Create terminal orders Integrate with our Create Terminal Orders method so that you can order and configure processing terminals for a processing account. List terminal orders Integrate with our List Terminal Orders method to retrieve a list of terminal orders as",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createProcessingAccount",
          "createProcessingAccountAttachment",
          "createReminder",
          "createTerminalOrder",
          "getProcessingAccounts",
          "listMerchantOwners",
          "listProcessingAccountContacts",
          "listProcessingAccountsFundingAccounts",
          "listProcessingAccountsProcessingTerminals",
          "listProcessingAccountsTerminalOrders",
          "retrieveProcessingAccountPricing"
        ]
      }
    },
    {
      "route": "/api/resources/processing-terminals",
      "type": "guide",
      "title": "Processing terminals",
      "description": "Reference for the processing terminal endpoints, covering how to retrieve terminal, host, and device configuration details, and how to close a batch.",
      "headings": [
        "Retrieve Processing Terminal",
        "Retrieve Processing Terminal Host Configuration",
        "Retrieve device configuration",
        "Close batch"
      ],
      "plainText": "Use our Processing Terminals endpoints to retrieve information about a processing terminal or to close a batch. Retrieve Processing Terminal Integrate with our Retrieve Processing Terminal method to retrieve information about a processing terminal. Retrieve Processing Terminal Host Configuration Integrate with our Retrieve Host Processor Configuration method to retrieve the host configuration of a processing terminal, which you can use to connect a merchant’s account to a third-party gateway. Retrieve device configuration Integrate with our Retrieve device configuration method to retrieve the configuration details for a device model or type. Close batch Integrate with our Close batch method to manually close a batch on a processing terminal.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "closeBatch",
          "getProcessingTerminal",
          "getProcessingTerminalHostConfiguration",
          "retrieveDeviceConfiguration"
        ]
      }
    },
    {
      "route": "/api/resources/secure-tokens",
      "type": "guide",
      "title": "Secure tokens",
      "description": "Reference for the secure token endpoints, covering how to create, retrieve, list, update, and delete a token that represents a customer's saved payment details.",
      "headings": [
        "Retrieve the details of a token",
        "Update a token",
        "Delete a token"
      ],
      "plainText": "Use our Secure Tokens endpoints to create and manage a secure token that represents a customer’s payment details. Merchants can use the token to run transactions instead of using the customer’s card or bank details, and they can also store the token without additional PCI compliance requirements. Integrate with the Create Secure Token method to create a secure token. You can then include the token in requests to our gateway, for example, to run a sale or to subscribe a customer to a payment plan. When you create a token, you generate and include a secureTokenId to identify it. You can then use the secureTokenId to manage the token, including the following: Retrieve the details of a token Integrate with our Retrieve Secure Token method to view a token, the customer’s payment details, and the Merchant Initiated Transaction (MIT) agreement. Integrate with our List Secure Tokens to return a paginated list of secure tokens that meet specific query requirements. Update a token Note: If you’re using our Hosted Fields solution, integrate with the Update Account Details method to update a secure token with the details from a single-use token . Integrate with our Update Secure Token method to update the customer’s saved payment details. You can update: Card or bank account details MIT agreement Customer’s contact details Customer’s address details Delete a token Integrate with our Delete Secure Token method to permanently delete a secure token from our vault .",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "accountUpdate",
          "createSecureToken",
          "createSubscription",
          "deleteSecureToken",
          "getSecureToken",
          "listSecureTokens",
          "payment",
          "updateSecureToken"
        ]
      }
    },
    {
      "route": "/api/resources/subscriptions",
      "type": "guide",
      "title": "Subscriptions",
      "description": "Reference for the subscription endpoints, covering how to create, retrieve, list, update, deactivate, reactivate, and manually collect a repeat payment from a customer.",
      "headings": [
        "Retrieve the details of the subscription",
        "Update the subscription",
        "Stop the subscription",
        "Manually collect a payment for the subscription"
      ],
      "plainText": "Important: Before you can use the Subscriptions endpoints, you need to integrate with the Payment Plans endpoints and the Secure Tokens endpoints. Use our Subscriptions endpoints to take repeat payments from customers. Integrate with our Create Subscription method to assign a customer to a payment plan and take repeat payments. The Create Subscription request contains the following details: ID of the payment plan that the merchant wants to use. Secure token that represents the customer's payment details. (Optional) Adjustments that override details of the payment plan. When you create a subscription, you also need to provide a subscriptionId, which you can use to complete the following actions: Retrieve the details of the subscription Integrate with our Retrieve Subscription method to view details of the subscription, including the amount for each payment, start date, and payment schedule. Integrate with our List Subscription method to return a paginated list of subscriptions that meet specific query parameters. Update the subscription Integrate with our Update Subscription method to update the details of the subscription, for example, increase the amount for each payment. Stop the subscription Integrate with our Deactivate Subscription method to stop taking payments from the customer. If you want to start taking payments again, integrate with our Re-activate Subscription method. Manually collect a payment for the subscription Integrate with the Pay Manual Subscription method to manually collect a payment.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createSecureToken",
          "createSubscription",
          "deactivateSubscription",
          "getSubscription",
          "listSubscriptions",
          "paySubscription",
          "reactivateSubscription",
          "updateSubscription"
        ]
      }
    },
    {
      "route": "/api/retrieve-device-configuration",
      "type": "reference",
      "title": "Retrieve a device configuration",
      "description": "GET /processing-terminals/{processingTerminalId}/device-configurations/{model}",
      "headings": [],
      "plainText": "Use this method to retrieve configuration details for a device associated with a processing terminal. Our gateway returns the following details about the configuration: Supported features Applications Certificates and revoked certificates Visual assets",
      "refs": {
        "workflowIds": [
          "configure-a-device"
        ],
        "operationIds": [
          "retrieveDeviceConfiguration"
        ]
      }
    },
    {
      "route": "/api/retrieve-payment-link",
      "type": "reference",
      "title": "Retrieve payment link",
      "description": "GET /payment-links/{paymentLinkId}",
      "headings": [],
      "plainText": "Use this method to retrieve information about a payment link. To retrieve a payment link, you need its paymentLinkId. Our gateway returned the paymentLinkId in the response of the Create Payment Link method. Note: If you don't have the paymentLinkId, use our List Payment Links method to search for the payment link. Our gateway returns the following information about the payment link: type - Indicates whether the link can be used only once or if it can be used multiple times. authType - Indicates whether the transaction is a sale or a pre-authorization. paymentMethods - Indicates the payment method that the merchant accepts. charge - Indicates whether the merchant or the customer enters the amount for the transaction. status - Indicates if the payment link is active.",
      "refs": {
        "workflowIds": [
          "collect-with-payment-link"
        ],
        "operationIds": [
          "retrievePaymentLink"
        ]
      }
    },
    {
      "route": "/api/retrieve-processing-account-pricing",
      "type": "reference",
      "title": "Retrieve processing account pricing agreement",
      "description": "GET /processing-accounts/{processingAccountId}/pricing",
      "headings": [],
      "plainText": "Use this method to retrieve the pricing agreement that we apply to a processing account. To retrieve the pricing agreement of a processing account, you need the processingAccountId. Our gateway returned the processingAccountId in the response to the Create Merchant Platform method and Create Processing Account method. Note: If you don't have the processingAccountId, use our List Merchant Platform’s Processing Accounts method to search for the processing account. Our gateway returns the following information about the pricing agreement that we apply to the processing account: Base fees, including the annual fee and the fees for each chargeback and retrieval. Processor fees, including the fees that we apply for processing card and ACH payments. Gateway fees, including the setup fee and the fees for each transaction. Service fees, including the fee that we apply if the merchant has signed up to a Hardware Advantage Plan.",
      "refs": {
        "workflowIds": [
          "review-merchant-hierarchy"
        ],
        "operationIds": [
          "retrieveProcessingAccountPricing"
        ]
      }
    },
    {
      "route": "/api/retrieve-signature",
      "type": "reference",
      "title": "Retrieve signature",
      "description": "GET /signatures/{signatureId}",
      "headings": [],
      "plainText": "Use this method to retrieve a signature that a payment device captured using Payroc Cloud. Our gateway returns the following information about the signature: Image of the signature Format of the image Date that the device captured the image",
      "refs": {
        "workflowIds": [
          "capture-signature-on-a-device"
        ],
        "operationIds": [
          "retrieveSignature"
        ]
      }
    },
    {
      "route": "/api/reverse-bank-transfer-payment",
      "type": "reference",
      "title": "Reverse payment",
      "description": "POST /bank-transfer-payments/{paymentId}/reverse",
      "headings": [],
      "plainText": "Use this method to cancel a bank transfer payment in an open batch. This is also known as voiding a payment. To cancel a bank transfer payment, you need its paymentId. Our gateway returned the paymentId in the response of the Create Payment method. Note: If you don't have the paymentId, use our List Payments method to search for the bank transfer payment. If your request is successful, our gateway removes the bank transfer payment from the merchant’s open batch and no funds are taken from the customer's bank account.",
      "refs": {
        "workflowIds": [
          "reverse-a-bank-transfer-payment"
        ],
        "operationIds": [
          "reverseBankTransferPayment"
        ]
      }
    },
    {
      "route": "/api/reverse-bank-transfer-refund",
      "type": "reference",
      "title": "Reverse refund",
      "description": "POST /bank-transfer-refunds/{refundId}/reverse",
      "headings": [],
      "plainText": "Use this method to cancel a bank transfer refund in an open batch. To cancel a refund, you need its refundId. Our gateway returned the refundId in the response of the Refund Payment or Create Refund method. Note: If you don’t have the refundId, use our List Refunds method to search for the refund. If your request is successful, the gateway removes the refund from the merchant’s open batch, and no funds are returned to the cardholder’s account.",
      "refs": {
        "workflowIds": [
          "reverse-a-bank-transfer-refund"
        ],
        "operationIds": [
          "reverseBankTransferRefund"
        ]
      }
    },
    {
      "route": "/api/reverse-payment",
      "type": "reference",
      "title": "Reverse payment",
      "description": "POST /payments/{paymentId}/reverse",
      "headings": [],
      "plainText": "Use this method to cancel or to partially cancel a payment in an open batch. This is also known as voiding a payment. To cancel a payment, you need its paymentId. Our gateway returned the paymentId in the response of the Create Payment method. Note: If you don't have the paymentId, use our List Payments method to search for the payment. If your request is successful, our gateway removes the payment from the merchant's open batch and no funds are taken from the cardholder's account.",
      "refs": {
        "workflowIds": [
          "pay-with-single-use-token",
          "reverse-a-card-payment"
        ],
        "operationIds": [
          "reversePayment"
        ]
      }
    },
    {
      "route": "/api/reverse-refund",
      "type": "reference",
      "title": "Reverse refund",
      "description": "POST /refunds/{refundId}/reverse",
      "headings": [],
      "plainText": "Use this method to cancel a refund in an open batch. To cancel a refund, you need its refundId. Our gateway returned the refundId in the response of the Refund Payment or Create Refund method. Note: If you don’t have the refundId, use our List Refunds method to search for the refund. If your request is successful, the gateway removes the refund from the merchant’s open batch and no funds are returned to the cardholder’s account.",
      "refs": {
        "workflowIds": [
          "reverse-a-refund"
        ],
        "operationIds": [
          "reverseRefund"
        ]
      }
    },
    {
      "route": "/api/search-devices",
      "type": "reference",
      "title": "Search devices",
      "description": "GET /devices",
      "headings": [],
      "plainText": "Use this method to return a paginated list of devices associated with a merchant's API key or an ISV's API key. Use the query parameters to filter the list of results that we return, for example, to search for devices by their model. Our gateway returns the following information about each device in the list: Unique identifier that we assigned to the device. Serial number of the device. Key serial identifier (KSI) of the device. Device model or type of device. Date that our gateway added the device to our systems. Information about the last transaction that the device processed.",
      "refs": {
        "workflowIds": [
          "run-a-sale-on-a-device"
        ],
        "operationIds": [
          "searchDevices"
        ]
      }
    },
    {
      "route": "/api/send-payment-instruction",
      "type": "reference",
      "title": "Submit payment instruction",
      "description": "POST /devices/{serialNumber}/payment-instructions",
      "headings": [],
      "plainText": "Use this method to submit an instruction request to initiate a sale on a payment device. In the request, include the order amount and currency. When you send a successful request, our gateway returns information about the payment instruction and a paymentInstructionId, which you need for the following methods: Retrieve payment instruction - View the details of the payment instruction. Cancel payment instruction - Cancel the payment instruction.",
      "refs": {
        "workflowIds": [
          "run-a-sale-on-a-device"
        ],
        "operationIds": [
          "sendPaymentInstruction"
        ]
      }
    },
    {
      "route": "/api/send-refund-instruction",
      "type": "reference",
      "title": "Submit refund instruction",
      "description": "POST /devices/{serialNumber}/refund-instructions",
      "headings": [],
      "plainText": "Use this method to submit an instruction request to initiate a refund on a payment device. In the request, include the refund amount and currency. If the request is successful, our gateway returns information about the refund instruction and a refundInstructionId, which you need for the following methods: Retrieve refund instruction - View the details of the refund instruction. Cancel refund instruction - Cancel the refund instruction.",
      "refs": {
        "workflowIds": [
          "refund-on-a-device"
        ],
        "operationIds": [
          "sendRefundInstruction"
        ]
      }
    },
    {
      "route": "/api/send-signature-instruction",
      "type": "reference",
      "title": "Submit signature instruction",
      "description": "POST /devices/{serialNumber}/signature-instructions",
      "headings": [],
      "plainText": "Use this method to submit an instruction to capture a customer's signature on a payment device. Our gateway returns information about the signature instruction and a signatureInstructionId, which you need for the following methods: Retrieve signature instruction - View the details of the signature instruction. Cancel signature instruction - Cancel the signature instruction.",
      "refs": {
        "workflowIds": [
          "capture-signature-on-a-device"
        ],
        "operationIds": [
          "sendSignatureInstruction"
        ]
      }
    },
    {
      "route": "/api/share-payment-link",
      "type": "reference",
      "title": "Share payment link",
      "description": "POST /payment-links/{paymentLinkId}/sharing-events",
      "headings": [],
      "plainText": "Use this method to email a payment link to a customer. To email a payment link, you need its paymentLinkId. Our gateway returned the paymentLinkId in the response of the Create Payment Link method. Note: If you don't have the paymentLinkId, use our List Payment Links method to search for the payment link. In the request, you must provide the recipient's name and email address. In the response, our gateway returns a sharingEventId, which you can use to List Payment Link Sharing Events .",
      "refs": {
        "workflowIds": [
          "collect-with-payment-link"
        ],
        "operationIds": [
          "sharePaymentLink"
        ]
      }
    },
    {
      "route": "/api/unreferenced-refund",
      "type": "reference",
      "title": "Create unreferenced refund",
      "description": "POST /refunds",
      "headings": [],
      "plainText": "Use this method to create an unreferenced refund. An unreferenced refund is a refund that isn't linked to a payment. Note: If you have the paymentId of the payment you want to refund, use our Refund Payment method. If you use our Refund Payment method, our gateway sends the refund amount to the customer's original payment method and links the refund to the payment. In the request, you must provide the customer's payment details and the refund amount. In the response, our gateway returns information about the refund and a refundId, which you need for the following methods: Retrieve refund - View the details of the refund. Adjust refund - Update the details of the refund. Reverse refund - Cancel the refund if it's in an open batch.",
      "refs": {
        "workflowIds": [
          "run-unreferenced-card-refund"
        ],
        "operationIds": [
          "unreferencedRefund"
        ]
      }
    },
    {
      "route": "/api/update-contact",
      "type": "reference",
      "title": "Update contact",
      "description": "PUT /contacts/{contactId}",
      "headings": [],
      "plainText": "Use this method to update a contact of a processing account. To update a contact, you need its contactId. Our gateway returned the contactId in the response of the Create Processing Account method. Note: If you don't have the contactId, use our List Contacts method to search for the contact. You can update the following details about a contact: First name and last name. Contact details, including their phone number or mobile number. Identification details, including their identification type and number. Role within the business, for example, if they are a manager.",
      "refs": {
        "workflowIds": [
          "update-a-contact"
        ],
        "operationIds": [
          "updateContact"
        ]
      }
    },
    {
      "route": "/api/update-event-subscription",
      "type": "reference",
      "title": "Update event subscription",
      "description": "PUT /event-subscriptions/{subscriptionId}",
      "headings": [],
      "plainText": "Use this method to update the details of an event subscription. To update an event subscription, you need its subscriptionId. Our gateway returned the subscriptionId in the response of the Create Event Subscription method. Note: If you don’t have the subscriptionId, use our List Event Subscriptions method to search for the event subscription. You can update the following details about an event subscription: Status of the event subscription. Events that you have subscribed to. For a list of events that you can subscribe to, go to Events list . Information about how we contact you when an event occurs.",
      "refs": {
        "workflowIds": [
          "update-an-event-subscription"
        ],
        "operationIds": [
          "updateEventSubscription"
        ]
      }
    },
    {
      "route": "/api/update-funding-account",
      "type": "reference",
      "title": "Update funding account",
      "description": "PUT /funding-accounts/{fundingAccountId}",
      "headings": [],
      "plainText": "Important: You can't update the details of a funding account that is associated with a processing account. Use this method to update the details of a funding account that is associated with a funding recipient. To update a funding account, you need its fundingAccountId. Our gateway returned the fundingAccountId when you created the funding account. Note: If you don’t have the fundingAccountId, use our List Funding Accounts method to search for the funding account. You can update the following details about the funding account: Account type. Account holder's name. ACH information for the account.",
      "refs": {
        "workflowIds": [
          "update-a-funding-account"
        ],
        "operationIds": [
          "updateFundingAccount"
        ]
      }
    },
    {
      "route": "/api/update-funding-recipient",
      "type": "reference",
      "title": "Update funding recipient",
      "description": "PUT /funding-recipients/{recipientId}",
      "headings": [],
      "plainText": "Use this method to update the details of a funding recipient. If a request contains significant changes, we might need to re-approve the funding recipient. To update a funding recipient, you need it's recipientId. Our gateway returned the recipientId in the response of the Create Funding Recipient method. Note : If you don't have the recipientId, use our List Funding Recipients method to search for the funding recipient. You can update the following details of a funding recipient: Doing Business As (DBA) name Tax ID and charity ID Address and contact methods",
      "refs": {
        "workflowIds": [
          "update-a-funding-recipient"
        ],
        "operationIds": [
          "updateFundingRecipient"
        ]
      }
    },
    {
      "route": "/api/update-instructions",
      "type": "reference",
      "title": "Update funding instruction",
      "description": "PUT /funding-instructions/{instructionId}",
      "headings": [],
      "plainText": "Important: You can update a funding instruction only if its status is accepted . To view the status of a funding instruction, use our Retrieve Funding Instruction method. Use this method to update the details of a funding instruction. To update a funding instruction, you need its instructionId. Our gateway returned the instructionId in the response of the Create Funding Instruction method. Note: If you don't have the fundingInstructionId, use our List Funding Instructions method to search for the funding instruction. You can modify the following information for the funding instruction: Merchant ID (MID) of the merchant whose funding balance you want to distribute. Funding account that you want to send funds to. Amount that you want to send to the funding account.",
      "refs": {
        "workflowIds": [
          "update-a-funding-instruction"
        ],
        "operationIds": [
          "updateInstructions"
        ]
      }
    },
    {
      "route": "/api/update-owner",
      "type": "reference",
      "title": "Update owner",
      "description": "PUT /owners/{ownerId}",
      "headings": [],
      "plainText": "Important: You can't update the details of an owner of a processing account. Use this method to update the details of an owner associated with a funding recipient. To update an owner, you need their ownerId. Our gateway returned the ownerId in the response of the Create Funding Recipient method and the Create Funding Recipient Owner method. Note: If you don't have the ownerId, use the List Funding Recipient Owners method, the Retrieve Funding Recipient method, or the List Funding Recipients method to search for the funding recipient owner. You can update the following details about an owner: Personal details, including their name, date of birth, and address. Identification details, including their identification type and number. Contact details, including their email address. Relationship to the business, including whether they are a control prong.",
      "refs": {
        "workflowIds": [
          "update-an-owner"
        ],
        "operationIds": [
          "updateOwner"
        ]
      }
    },
    {
      "route": "/api/update-payment-link",
      "type": "reference",
      "title": "Partially update payment link",
      "description": "PATCH /payment-links/{paymentLinkId}",
      "headings": [],
      "plainText": "Use this method to partially update a payment link. Structure your request to follow the RFC 6902 standard. To update a payment link, you need its paymentLinkId, which we sent you in the response of the Create Payment Link method. Note: If you don't have the paymentLinkId, use our List Payment Links method to search for the payment link. You can update the following properties of a multi-use link: expiresOn parameter - Expiration date of the link. customLabels object - Label for the payment button. credentialOnFile object - Settings for saving the customer's payment details. You can update the following properties of a single-use link: expiresOn parameter - Expiration date of the link. authType parameter - Transaction type of the payment link. amount parameter - Total amount of the transaction. currency parameter - Currency of the transaction. description parameter - Brief description of the transaction. customLabels object - Label for the payment button. credentialOnFile object - Settings for saving the customer's payment details. Note: When a merchant updates a single-use link, we update the payment URL and HTML code in the assets object. The customer can't use the original link to make a payment.",
      "refs": {
        "workflowIds": [
          "collect-with-payment-link"
        ],
        "operationIds": [
          "updatePaymentLink"
        ]
      }
    },
    {
      "route": "/api/update-payment-plan",
      "type": "reference",
      "title": "Partially update payment plan",
      "description": "PATCH /processing-terminals/{processingTerminalId}/payment-plans/{paymentPlanId}",
      "headings": [],
      "plainText": "Use this method to partially update a payment plan. Structure your request to follow the RFC 6902 standard. To update a payment plan, you need its paymentPlanId, which you sent in the request of the Create Payment Plan method. Note: If you don't have the paymentPlanId, use our List Payment Plans method to search for the payment plan. You can update all of the properties of the payment plan except for the paymentPlanId. The value you sent for the onUpdate parameter when you created the payment plan indicates what happens to the associated subscriptions when you update the plan: update - Our gateway updates the subscriptions associated with the payment plan. continue - Our gateway doesn't update the subscriptions associated with the payment plan.",
      "refs": {
        "workflowIds": [
          "update-a-payment-plan"
        ],
        "operationIds": [
          "updatePaymentPlan"
        ]
      }
    },
    {
      "route": "/api/update-pricing-intent",
      "type": "reference",
      "title": "Update pricing intent",
      "description": "PUT /pricing-intents/{pricingIntentId}",
      "headings": [],
      "plainText": "Use this method to update the details of a pricing intent. If you update a pricing intent, it won't affect merchant that you've previously onboarded. To update a pricing intent, you need its pricingIntentId. Our gateway returned the pricingIntentId in the response of the Create Pricing Intent method. Note: If you don't have the pricingIntentId, use our List Pricing Intents method to search for the pricing intent. You can update the following details about a pricing intent: Fees, including the base fees, processor fees, and gateway fees. Custom name for the pricing intent. Additional services that merchants can sign up for.",
      "refs": {
        "workflowIds": [
          "replace-a-pricing-intent"
        ],
        "operationIds": [
          "updatePricingIntent"
        ]
      }
    },
    {
      "route": "/api/update-secure-token",
      "type": "reference",
      "title": "Partially update secure token",
      "description": "PATCH /processing-terminals/{processingTerminalId}/secure-tokens/{secureTokenId}",
      "headings": [],
      "plainText": "Use this method to partially update a secure token. Structure your request to follow the RFC 6902 standard. To update a secure token, you need its secureTokenId, which you sent in the request of the Create Secure Token method. Note: If you don't have the secureTokenId, use our List Secure Tokens method to search for the payment. You can update all of the properties of the secure token, except the following: processingTerminalId type token status source/Card type cardNumber cardType currency debit surcharging source/ACH account accountNumber routingNumber source/PAD account type accountNumber transitNumber",
      "refs": {
        "workflowIds": [
          "update-a-saved-payment-method"
        ],
        "operationIds": [
          "updateSecureToken"
        ]
      }
    },
    {
      "route": "/api/update-subscription",
      "type": "reference",
      "title": "Partially update subscription",
      "description": "PATCH /processing-terminals/{processingTerminalId}/subscriptions/{subscriptionId}",
      "headings": [],
      "plainText": "Use this method to partially update a subscription. Structure your request to follow the RFC 6902 standard. To update a subscription, you need its subscriptionId, which you sent in the request of the Create subscription method. Note: If you don't have the subscriptionId, use our List subscriptions method to search for the payment. You can update all of the properties of the subscription except for the following: Can't delete recurringOrder description name Can't perform any PATCH operation currentState type frequency paymentPlan",
      "refs": {
        "workflowIds": [
          "manage-subscriptions"
        ],
        "operationIds": [
          "updateSubscription"
        ]
      }
    },
    {
      "route": "/api/verify-bank-account",
      "type": "reference",
      "title": "Verify bank account",
      "description": "POST /bank-accounts/verify",
      "headings": [],
      "plainText": "Use this method to verify a customer's bank account details. In the request, send the customer's bank account details. Our gateway can verify the following types of bank details: Automated Clearing House (ACH) details Pre-Authorized Debit (PAD) details In the response, our gateway indicates if the account details are valid and if you should use them in follow-on actions.",
      "refs": {
        "workflowIds": [
          "verify-a-bank-account"
        ],
        "operationIds": [
          "verifyBankAccount"
        ]
      }
    },
    {
      "route": "/api/verify-card",
      "type": "reference",
      "title": "Verify card",
      "description": "POST /cards/verify",
      "headings": [],
      "plainText": "Use this method to verify a customer’s card details. In the request, send the customer’s card details. In the response, our gateway indicates if the card details are valid and if you should use them in follow-on actions.",
      "refs": {
        "workflowIds": [
          "verify-a-card"
        ],
        "operationIds": [
          "verifyCard"
        ]
      }
    },
    {
      "route": "/api/versioning",
      "type": "guide",
      "title": "Versioning",
      "description": "Explains the Payroc API agile versioning strategy, including how backward compatibility is maintained and how version numbers are incremented and specified in request URLs.",
      "headings": [
        "How we implement agile versioning"
      ],
      "plainText": "We apply an agile versioning strategy to our API. This means that when we update our API, we maintain backward compatibility for as long as possible. We increment the API version only when changes break backward compatibility. How we implement agile versioning We specify the version number of the API in the URL of the resource, directly before the category or feature name. For example, https://api.payroc.com/v1/funding-accounts. When we release a major update, we update the version number of the API to the next whole number. Important: Use HTTPS for all requests to the Payroc API. We reject all HTTP requests, and all requests that are not properly authenticated.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides",
      "type": "guide",
      "title": "Guides",
      "description": "Build and test your Payroc integration.",
      "headings": [
        "Getting started",
        "API keys",
        "Payments",
        "Payroc Cloud",
        "Testing"
      ],
      "plainText": "Getting started Set up and test your first integration. Browse guides → API keys Create and manage Payroc App API keys. Browse guides → Payments Integrate hosted checkout, Hosted Fields and digital wallets. Browse guides → Payroc Cloud Connect in-person payment devices to your integration. Browse guides → Testing Send requests to the Payroc Cloud Simulator. Browse guides →",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/api-keys",
      "type": "guide",
      "title": "API keys",
      "description": "Create and manage Payroc App API keys.",
      "headings": [],
      "plainText": "Create and manage Payroc App API keys. Generate a Payroc App API key View a Payroc App API key Change the settings of a Payroc App API key Deactivate a Payroc App API key Reactivate a Payroc App API key",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/api-keys/change-the-settings-of-a-payroc-app-api-key",
      "type": "guide",
      "title": "Change the settings of a Payroc App API key",
      "description": "Explains how to update the alias, notification email, API permissions, and processing terminals of a Payroc App API key using the Self-Care Portal.",
      "headings": [],
      "plainText": "You can change the settings of a Payroc App API key in the Self-Care Portal. Sign in to https://payments.payroc.com/merchant/selfcare. On the side menu, select Settings, and then select API Keys. Select the API key that you want to update. Note: You can use the search function to search by the Key Alias that you assigned to the key when you created it. In the General Setup tab, update the following settings: Key Alias - Update the name of the API key. Notification Email - Update the email address that we send notifications to when we create, deactivate, or reactivate the API key. API Permissions - Select which APIs the API key can access and its permission levels. Select SAVE. In the Processing Terminals tab, select which processing terminals the API key applies to. Select SAVE.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/api-keys/deactivate-a-payroc-app-api-key",
      "type": "guide",
      "title": "Deactivate a Payroc App API key",
      "description": "Explains how to deactivate a Payroc App API key in the Self-Care Portal, preventing its use without permanently deleting it.",
      "headings": [],
      "plainText": "You can deactivate a Payroc App API key in the Self-Care Portal. After you deactivate a Payroc App API key, you can still view its details, but you can't use it unless you reactivate it. To deactivate a Payroc App API key, complete the following steps: Sign in to https://payments.payroc.com/merchant/selfcare. On the side menu, select Settings, and then select API Keys. Locate the API key that you want to deactivate. Note: You can use the search function to search by the Key Alias that you assigned to the key when you created it. From the Action column, select , and then select Revoke. Select OK.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/api-keys/generate-a-payroc-app-api-key",
      "type": "guide",
      "title": "Generate a Payroc App API key",
      "description": "Shows how to generate and view a Payroc App API key in the Self-Care Portal to authenticate with the Payroc Cloud Simulator.",
      "headings": [
        "Generate a Payroc App API key",
        "View the Payroc App API key"
      ],
      "plainText": "To use the Payroc Cloud Simulator, you need a Payroc App API key, which you can generate and view in the Self-Care Portal. Note: If you don't have access to the Self-Care Portal, contact our Integrations Team at integrationsupport@payroc.com. Generate a Payroc App API key Sign in to https://payments.payroc.com/merchant/selfcare. On the side menu, select Settings, and then select API Keys. Select NEW API KEY. In the Key Alias box, enter the name of the API key. In the Notification Email box, enter your email address. We send notifications to this email address when we create, revoke, or reactivate the API key. In the API Permissions section, select the following checkboxes:Account API – Access the merchant gateway account. Customer API – Access customer details, for example, secure tokens and subscriptions. Transaction API – Run card transactions. Bank Transfer API – Run bank transfer transactions. Reporting API – Access to reporting data. For each API that you selected, select the dropdown menu, and then select Full Access. Select SAVE. Select the processing terminals that the key applies to. Select SAVE. View the Payroc App API key On the side menu, select Settings, and then select API Keys. Locate the API key that you want to view. Note: You can use the search function to search by the Key Alias that you assigned to the key when you created it. From the Action column, select , and then select View Authentication Key. Enter the password for your Self-Care Portal account. View and copy the key. Note: You can use the Self-Care Portal to update, deactivate, and reactivate the Payroc App API keys. For more information about how to manage API keys, go to API keys.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/api-keys/reactivate-a-payroc-app-api-key",
      "type": "guide",
      "title": "Reactivate a Payroc App API key",
      "description": "Explains how to reactivate a previously deactivated Payroc App API key using the Self-Care Portal.",
      "headings": [],
      "plainText": "You can reactivate a Payroc App API key that you previously deactivated in the Self-Care Portal. To reactivate a Payroc App API key, complete the following steps: Sign in to https://payments.payroc.com/merchant/selfcare. On the side menu, select Settings, and then select API Keys. To view the Payroc App API keys that you've deactivated, select the Revoked tab. API Keys Revoked Tab Locate the API key that you want to reactivate. Note: You can use the search function to search by the Key Alias that you assigned to the key when you created it. From the Action column, select , and then select Authorize. Select OK.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/api-keys/view-a-payroc-app-api-key",
      "type": "guide",
      "title": "View a Payroc App API key",
      "description": "Explains how to locate and copy a Payroc App API key from the Self-Care Portal.",
      "headings": [],
      "plainText": "You can view a Payroc App API key in the Self-Care Portal. Note: If you don't have access to the Self-Care Portal, contact our Integrations Team at integrationsupport@payroc.com. To view a Payroc App API key, complete the following steps: Sign in to https://payments.payroc.com/merchant/selfcare. On the side menu, select Settings, and then select API Keys. Locate the API key that you want to view. Note: You can use the search function to search by the Key Alias that you assigned to the key when you created it. From the Action column, select , and then select View Authentication Key. Enter the password for your Self-Care Portal account. View and copy the key.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/boarding",
      "type": "guide",
      "title": "Board a merchant",
      "description": "Board a merchant by creating a merchant platform with processing accounts, owners, contacts, and a terminal order.",
      "headings": [
        "Relationship between the boarding resources",
        "Example",
        "Pricing",
        "Your integration journey",
        "Guides",
        "Create a pricing intent",
        "Create a merchant platform",
        "Add a processing account to a merchant platform",
        "Create a terminal order",
        "Add an attachment to a processing account"
      ],
      "plainText": "Prerequisites: Authentication To board a merchant with Payroc, you need to create the following resources: Merchant platform – The business and its legal information, its owners, and its processing accounts. Processing accounts – Each merchant platform must include one or more processing accounts that run transactions. Owners – Each processing account must include one or more owners. You must assign a control prong who is responsible for their merchant account. Contacts – Each processing account can include additional contacts. They are individuals we can contact about the processing account, for example, a store manager. Terminal orders – Each processing account can order one or more terminals to run transactions. Note: When you create a merchant platform, we recommend that you add all the business's processing accounts. If the business expands after you board a merchant, you can add additional processing accounts and their contacts. Relationship between the boarding resources The merchant platform is the main boarding resource and includes all the information about the business, including its legal information, processing accounts, owners, and contacts. The following diagram shows the relationship between the boarding resources: flowchart TD MP[\"Merchant platform\"]:::blue PA[\"Processing account\"]:::green TO[\"Terminal order\"]:::neutral OW[\"Owner\"]:::neutral CO[\"Contact\"]:::neutral MP --- PA PA -.- TO PA --- OW & CO classDef blue fill:#0051C2,stroke:#001D4E,color:#FFFFFF classDef green fill:#00E0B8,stroke:#001D4E,color:#001D4E classDef neutral fill:#E5E5E5,stroke:#636363,color:#001D4E Example The following example shows a merchant platform with two processing accounts: Springfield processing account has one owner and two contacts. Boston processing account has two owners and one contact. flowchart TD RMP[\"Rocfood merchant platform\"]:::blue SPA[\"Springfield processing account\"]:::green BPA[\"Boston processing account\"]:::green STO[\"Terminal order\"]:::neutral SOW[\"Owne",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/boarding/add-attachment-to-processing-account",
      "type": "guide",
      "title": "Add an attachment to a processing account",
      "description": "Upload a document to a processing account by sending a POST request to the Processing Accounts attachments endpoint, then optionally check the upload status via the Attachments endpoint.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Upload an attachment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 2. (Optional) Check the upload status of the attachment",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)"
      ],
      "plainText": "Prerequisites: Authentication You can use the attachments feature of our API to add a document to a processing account to support a merchant's application, for example, questionnaires, banking evidence, and personal identification. You can add only one attachment in each request to our API, and each attachment must be an uncompressed file under 50 MB in one of the following formats: .bmp, .csv, .doc, .docx, .gif, .htm, .html, .jpg, .jpeg, .msg, .pdf, .png, .ppt, .pptx, .tif, .tiff, .txt, .xls, .xlsx After we receive your request, we upload the document and attach it to the processing account. You can use our API to check the upload status of the document and to view information about the document. Integration steps Upload an attachment. (Optional) Check the upload status of the attachment. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Important: This endpoint accepts a file upload. Set the value of the Content-Type header to multipart/form-data instead of application/json. Step 1. Upload an attachment To upload an attachment, send a POST request to our Processing Accounts endpoint. Environment URL Test https://api.uat.payroc.com/v1/processing-accounts/{processingAccountId}/attachments Production https://api.payroc.com/v1/processing-accounts/{processingAccountId}/attachments Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /processing-accounts/{processingAccountId}/attachments Example request Request POST https://api.payroc.com/v1/processing-accounts/{processingAccountId}/attachments curl -X POST https://api.payroc.com/v1/processing-accounts/38765/attachments \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: multipart/form-data\" \\ -F attachment='{ \"type\": \"personalIdentification\", \"description\": \"Passport as identification for lease agreement\", \"metadata\": {",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createProcessingAccountAttachment",
          "getAttachment"
        ]
      }
    },
    {
      "route": "/guides/boarding/merchant-platform",
      "type": "guide",
      "title": "Create a merchant platform",
      "description": "Create a merchant platform by sending a POST request to the merchant-platforms endpoint with the business's legal information, then optionally send a reminder to prompt the merchant's signature.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Create a merchant platform",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 2. (Optional) Create a reminder",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)"
      ],
      "plainText": "Prerequisites: Authentication An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). A merchant platform contains all the details of a merchant's business. When you create a merchant platform, you provide the legal information about the business, which includes the unique tax ID, the legal business name, and the type of organization. We recommend that you also add all processing accounts that the merchant's business requires. For each processing account, include the following details: Business details including the Merchant Category Code (MCC) , Doing Business As (DBA) name, and address of the business. Owners' details including their names, addresses, and contact details. You must assign a control prong who is responsible for their account. Processing details including estimated average transaction amounts and monthly processing amounts. Pricing and funding details including pricing agreements and funding accounts for the processing account. Note: If the merchant’s business expands, you can add more processing accounts. Integration steps Step 1. Create a merchant platform Step 2. (Optional) Create a reminder Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. Create a merchant platform To create a merchant platform, send a POST request to our merchant platform endpoint. Environment URL Test https://api.uat.payroc.com/v1/merchant-platforms Production https://api.payroc.com/v1/merchant-platforms Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /merchant-platforms Example request Request POST https://api.payroc.com/v1/merchant-platforms Create merchant platform curl -X POST https://api.payroc.com/v1/merchant-platforms \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"business\": { \"name\": \"Example Corp\"",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createMerchant",
          "createReminder"
        ]
      }
    },
    {
      "route": "/guides/boarding/order-a-terminal",
      "type": "guide",
      "title": "Order a terminal",
      "description": "Order one or more terminals for a processing account by sending a POST request to the processing accounts terminal-orders endpoint with training, shipping, and solution details.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Create a terminal order",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)"
      ],
      "plainText": "Prerequisites: Authentication Important: These documents are an early draft and are subject to change. To order a terminal, you need the processingAccountId of the account you want to order the terminal for. To get the processingAccountId, go to Retrieve Merchant Platform. To order one or more terminals for a processing account, provide the following information: Training provider who will train the merchant to use the solution. Shipping address for hardware devices and peripheral devices. Solution details for each terminal including gateway settings, device settings, and application settings. To receive a notification when we change the status of a terminal order, subscribe to our terminalOrder.status.changed event. For more information about how to subscribe to an event, go to Create a Subscription. Integration steps Create a terminal order. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Create a terminal order To order a terminal, send a POST request to our processing accounts endpoint. Environment URL Test https://api.uat.payroc.com/v1/processing-accounts/{processingAccountId}/terminal-orders Production https://api.payroc.com/v1/processing-accounts/{processingAccountId}/terminal-orders Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /processing-accounts/{processingAccountId}/terminal-orders Example request Request POST https://api.payroc.com/v1/processing-accounts/{processingAccountId}/terminal-orders Terminal order curl -X POST https://api.payroc.com/v1/processing-accounts/38765/terminal-orders \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"orderItems\": [ { \"type\": \"solution\", \"solutionTemplateId\": \"Roc Services_DX8000\", \"solutionQuantity\": 1, \"deviceCondition\": \"new\", \"solutionSetup\": { \"timezone\": \"America/Chicago\", \"ind",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createTerminalOrder"
        ]
      }
    },
    {
      "route": "/guides/boarding/pricing-intent",
      "type": "guide",
      "title": "Create a pricing intent",
      "description": "Create a pricing intent by sending a POST request to the Pricing Intents endpoint, defining base fees, processor fees, and gateway fees to use as a reusable template for merchant processing accounts.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Create a pricing intent",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)"
      ],
      "plainText": "Prerequisites: Authentication A pricing intent is a template of fees that you apply to processing accounts when you board merchants. You can apply the same pricing intent to all processing accounts that you create or create multiple pricing intents to apply to different processing accounts. A pricing intent can include the following fee types: Base fees: For monthly maintenance, chargebacks, and early contract termination. All pricing intents must include base fees. Processor fees: For card payments and Automated Clearing House (ACH) payments. Processor fees also include the pricing model that you offer to the merchant, for example, RewardPay . Gateway fees: For using our payment gateway. Integration steps Create a pricing intent. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Create a pricing intent Send a POST request to our Pricing Intents endpoint: Environment URL Test https://api.uat.payroc.com/v1/pricing-intents Production https://api.payroc.com/v1/pricing-intents Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /pricing-intents Example request Request POST https://api.payroc.com/v1/pricing-intents Created pricing intent curl -X POST https://api.payroc.com/v1/pricing-intents \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" Created pricing intent import requests url = \"https://api.payroc.com/v1/pricing-intents\" headers = { \"Idempotency-Key\": \"8e03978e-40d5-43e8-bc93-6894a57f9324\", \"Authorization\": \"Bearer <token>\" } response = requests.post(url, headers=headers) print(response.json()) Created pricing intent const url = 'https://api.payroc.com/v1/pricing-intents'; const options = { method: 'POST', headers: { 'Idempotency-Key': '8e03978e-40d5-43e8-bc93-6894a57f9324', Authorization: 'Bearer <token>' } }; try { const response = await fetch(url, options); const data = await re",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createPricingIntent"
        ]
      }
    },
    {
      "route": "/guides/boarding/processing-account-create",
      "type": "guide",
      "title": "Add a processing account to a merchant platform",
      "description": "Add a processing account to an existing merchant platform by sending a POST request to the Merchant Platforms endpoint with business, owner, processing, and pricing details.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Create a processing account",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 2. (Optional) Create a reminder",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)"
      ],
      "plainText": "Prerequisites: Authentication · Create a merchant platform Important: You must create a merchant platform before you can add additional processing accounts. Each merchant platform includes one or more processing accounts that run transactions for the business. To create a processing account, you must provide the following types of information: Business details including the Merchant Category Code (MCC), Doing Business As (DBA) name, and address of the business. Owners’ details including their names, addresses, and contact details. You must assign a control prong who is responsible for their account. Processing details including estimated average transaction amounts and monthly processing amounts. Pricing and funding details including pricing agreements and funding accounts for the processing account. Note: You can add more than one processing account in the same request. Integration steps Step 1. Create a processing account Step 2. (Optional) Create a reminder Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. Create a processing account Send a POST request with the merchantPlatformId to our Merchant Platform endpoint: Environment URL Test https://api.uat.payroc.com/v1/merchant-platforms/{merchantPlatformId}/processing-accounts Production https://api.payroc.com/v1/merchant-platforms/{merchantPlatformId}/processing-accounts Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /merchant-platforms/{merchantPlatformId}/processing-accounts Example request Request POST https://api.payroc.com/v1/merchant-platforms/{merchantPlatformId}/processing-accounts Create processing account curl -X POST https://api.payroc.com/v1/merchant-platforms/12345/processing-accounts \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"doingBusinessAs\": \"Pizza Do",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createProcessingAccount",
          "createReminder"
        ]
      }
    },
    {
      "route": "/guides/events",
      "type": "guide",
      "title": "Event subscriptions",
      "description": "Subscribe to account changes and handle webhook notifications sent by our gateway.",
      "headings": [
        "How it works",
        "Subscribe to events",
        "Handle event notifications",
        "Your integration journey",
        "Guides",
        "Event notifications"
      ],
      "plainText": "Prerequisites: Authentication Event subscriptions are a feature of our API that you can subscribe to so that we notify you about changes to an account, for example, when we change the status of a processing account. Note: For a list of the events that you can subscribe to, go to Events list. How it works The following diagram shows how to subscribe to an event and how to handle an event. sequenceDiagram participant YI as Your integration participant GW as Gateway rect rgba(0, 81, 194, 0.4) Note over YI,GW: Subscribe to events YI->>GW: 1. Create an event subscription Note over GW: 2. Gateway creates the event subscription GW-->>YI: 3. Return a response end rect rgba(0, 224, 184, 0.3) Note over YI,GW: Handle event webhook requests Note over GW: 1. A change on the account triggers an event notification GW->>YI: 2. Send a webhook request Note over YI: 3. Receive the webhook request YI->>GW: 4. Return a 200 response end Subscribe to events Create an event subscription and send it to our gateway. Our gateway creates the event subscription. Our gateway sends you a response to confirm that we have created the subscription. Handle event notifications We make a change to an account and trigger an event notification. Our gateway sends a webhook to your endpoint. Your server returns a 200 response to confirm that you have received the webhook. Your integration journey To add event notifications to your integration, complete the following steps: Create an event subscription with our API. Handle the webhook. Guides Event notifications Add event notifications to your integration.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/events/create-event-subscription",
      "type": "guide",
      "title": "Create an event subscription",
      "description": "Create an event subscription by sending a POST request to the event-subscriptions endpoint to receive webhook notifications when specified events occur.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Create an event subscription",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 2. Send a 200 response code",
        "Step 3. Handle the notification content"
      ],
      "plainText": "Prerequisites: Authentication To add event notifications to your integration, use our API to create an event subscription and handle the notification that we send by webhook when an event occurs. Important: To receive notifications, your server must be able to handle POST requests. To create an event subscription, send the following information in your request: Event type - The event that you want to subscribe to. You can subscribe to more than one event within the same request. URI - The endpoint that we send notifications to. The endpoint must be publicly available. Secret - A secret that we return in the header of webhook requests to verify that it is a genuine request. Event status - The status of the event subscription. Email address - An email address that we contact if we can't communicate with the endpoint that you provided. Note: For a complete list of events that you can subscribe to, go to Events list. Integration steps Step 1. Create an event subscription Step 2. Send a 200 response code Step 3. Handle the notification content Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. Create an event subscription To create an event subscription, send a POST request to our event subscriptions endpoint. Environment URL Test https://api.uat.payroc.com/v1/event-subscriptions Production https://api.payroc.com/v1/event-subscriptions Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /event-subscriptions Example request Request POST https://api.payroc.com/v1/event-subscriptions Create event subscription curl -X POST https://api.payroc.com/v1/event-subscriptions \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"enabled\": true, \"eventTypes\": [ \"processingAccount.status.changed\" ], \"notifications\": [ { \"type\": \"webhook\", \"secret\": \"aBc",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createEventSubscription"
        ]
      }
    },
    {
      "route": "/guides/funding",
      "type": "guide",
      "title": "Fund merchants",
      "description": "Configure funding recipients and instructions.",
      "headings": [],
      "plainText": "Configure funding recipients and instructions. Send funds to your merchants Set up a funding recipient",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/funding/create-funding-instructions",
      "type": "guide",
      "title": "Send funds to your merchants",
      "description": "Send funds to your merchants by creating a Funding Instruction with a POST request to the Funding Instructions endpoint, optionally checking available balance first via GET /v1/funding-balance.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. (Optional) Check the available balance",
        "Schema (request.query)",
        "Example request",
        "Request",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 2. Create a funding instruction",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Test cases"
      ],
      "plainText": "Prerequisites: Authentication Important: Before you begin, make sure that you have read our Getting Started guide, and that you have received your API key. To send funds to your merchants, you need to provide us with instructions about: Funding accounts that we should send the funds to Amount of funds that we should send Before you create your funding instructions, we recommend that you check to make sure you have the funds available to send. Integration steps Step 1. (Optional) Check the available balance. Step 2. Create a funding instruction. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. (Optional) Check the available balance To check the available balance, you need to send a GET request to our Funding Balance endpoint. Environment URL Test https://api.uat.payroc.com/v1/funding-balance Production https://api.payroc.com/v1/funding-balance Schema (request.query) Query parameters for GET /funding-balance Example request Request GET https://api.payroc.com/v1/funding-balance Paginated list of merchant balances curl -G https://api.payroc.com/v1/funding-balance \\ -H \"Authorization: Bearer <token>\" \\ -d after=8516 \\ -d before=2571 \\ -d limit=25 \\ -d merchantId=4525644354 Paginated list of merchant balances import requests url = \"https://api.payroc.com/v1/funding-balance\" querystring = {\"after\":\"8516\",\"before\":\"2571\",\"limit\":\"25\",\"merchantId\":\"4525644354\"} headers = {\"Authorization\": \"Bearer <token>\"} response = requests.get(url, headers=headers, params=querystring) print(response.json()) Paginated list of merchant balances const url = 'https://api.payroc.com/v1/funding-balance?after=8516&before=2571&limit=25&merchantId=4525644354'; const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } Paginated list of merchant balances package main import ",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createInstruction",
          "getFundingBalance"
        ]
      }
    },
    {
      "route": "/guides/funding/create-funding-recipients",
      "type": "guide",
      "title": "Set up a funding recipient",
      "description": "Create a funding recipient by sending a POST request to the Funding Recipients endpoint, enabling third-party entities such as charities to receive funds from your account.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Create your funding recipient",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Test cases"
      ],
      "plainText": "Prerequisites: Authentication Important: Before you begin, make sure that you have read our Getting Started guide, and that you have received your API key. A funding recipient is an entity that can receive funds using funding instructions. Each funding recipient includes at least one of the following: Funding account: The funding recipient’s bank account. Owner: Individuals that are associated with the funding recipient. You can create funding recipients for third parties that can’t directly process sales. For example, charities. Integration steps Create your funding recipient. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Create your funding recipient To create your funding recipient, send a POST request to our Funding Recipients endpoint. Environment URL Test https://api.uat.payroc.com/v1/funding-recipients Production https://api.payroc.com/v1/funding-recipients To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /funding-recipients Note: Use our metadata feature to add custom information to your request. Example request Request POST https://api.payroc.com/v1/funding-recipients Create funding recipient curl -X POST https://api.payroc.com/v1/funding-recipients \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"recipientType\": \"privateCorporation\", \"taxId\": \"12-3456789\", \"doingBusinessAs\": \"Pizza Doe\", \"address\": { \"address1\": \"1 Example Ave.\", \"address2\": \"Example Address Line 2\", \"address3\": \"Example Address Line 3\", \"city\": \"Chicago\", \"country\": \"US\", \"postalCode\": \"60056\", \"state\": \"Illinois\" }, \"contactMethods\": [ { \"type\": \"email\", \"value\": \"jane.doe@example.com\" }, { \"type\": \"phone\", \"value\": \"2025550164\" } ], \"owners\": [ { \"firstName\": \"Jane\", \"lastName\": \"Doe\", \"dateOfBirth\": \"1964-03-22\", \"address\": { \"address1\": \"1 Example Ave.\", \"city\": \"Chi",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createFundingRecipient"
        ]
      }
    },
    {
      "route": "/guides/getting-started",
      "type": "guide",
      "title": "Getting started",
      "description": "Learn the stages of a Payroc integration, from your discovery call to going live with our API.",
      "headings": [
        "Your integration journey",
        "Base URL"
      ],
      "plainText": "Prerequisites: Authentication To integrate with the Payroc API, you need an API key. Contact our Sales team to set up your account and get started. Your integration journey flowchart LR A[\"Discovery call\"] B[\"Statement of work\"] C[\"Development\"] D[\"Validation\"] E[\"Go live\"] F[\"Ongoing support\"] A --> B --> C --> D --> E --> F \\ Stage What happens Discovery call Our Sales Engineering team discuss your requirements and identify the right solutions for your needs. Statement of work We produce a statement of work that defines the scope of your integration. Development Build against our API using our documentation, guides, and integration support team. Validation Test your integration using our sandboxes and test cases. Go live Go live with monitoring from our team for the first few weeks. Ongoing support Reach out to our Customer Support team at any time after launch. Base URL https://api.payroc.com/",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/getting-started/quickstart",
      "type": "guide",
      "title": "Quickstart",
      "description": "Get sandbox credentials and make your first Payroc API call.",
      "headings": [],
      "plainText": "Create a sandbox account at developers.payroc.com, generate an API key, and make your first request. Every request needs a fresh Idempotency-Key Send a unique UUID v4 per request; reusing a key replays the original response instead of charging twice. curl https://api.payroc.com/v1/payments \\ -H \"Authorization: Bearer $PAYROC_API_KEY\" \\ -H \"Idempotency-Key: $(uuidgen)\"",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments",
      "type": "guide",
      "title": "Payments",
      "description": "Explains how to use the Payments endpoints to take card, bank account, and digital wallet payments, and to run refunds and repeat payments",
      "headings": [
        "Run transactions",
        "Schedule repeat payments",
        "Save payment details",
        "Verify payment details",
        "Run a card sale",
        "Run a sale with bank account details",
        "Run a pre-authorization",
        "Refunds"
      ],
      "plainText": "Prerequisites: Authentication To take payments from a card, bank account, or digital wallet, use our Payments endpoints. You can use our Payments endpoints in the following channels: In-person payments – Accept payments on a physical terminal. Online payments – Accept payments through online checkout. MOTO payments – Accept payments by telephone, email, and written request. After you integrate with the Payments endpoints, your merchant can: Run transactions including sales and refunds. Schedule repeat payments. Save the customer’s payment details. Verify that payment details are valid. Run transactions We offer the following transaction types: Sale Pre-authorization and capture Referenced refund and unreferenced refund Reversal When you integrate against the Payments endpoints, you can offer the following features: Currency conversion - Give customers the option to pay in their own currency if the merchant’s currency is different. Offline processing – Accept payments even if the terminal can’t connect to the gateway, for example, if the terminal has an unreliable internet connection. Surcharging – Add a surcharge to the customer’s total price to cover the cost of the merchant’s card processing fees. Tipping – Present tip options to customers at the time of the transaction. Schedule repeat payments Integrate with our payment plans and subscriptions method so that your merchants can offer repeat payments to their customers. This can either be recurring payments with no end date, or a series of installment payments for a fixed period. To set up and manage repeat payments, you can either: Use your own software to manage payments, and our gateway to process them. OR Use our gateway to manage and process payments. Save payment details Using our tokenization solution, the merchant can save a customer’s payment details for future payments, which means a faster checkout. You store the payment details in either our vault or your own vault, and we return a token that a merchan",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createPaymentPlan",
          "createSubscription",
          "verifyBankAccount",
          "verifyCard"
        ]
      }
    },
    {
      "route": "/guides/payments/add-custom-fields",
      "type": "guide",
      "title": "Add custom fields to your integration",
      "description": "Add merchant-defined custom fields to card payments, bank transfers, refunds, subscriptions, and secure token requests using the customFields object.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Contact us to activate custom fields",
        "Step 2. Create the custom field on the Self Care Portal",
        "Step 3. (Optional) Set the custom field as a dynamic descriptor",
        "Enable dynamic descriptors",
        "Select the custom field to use as the dynamic descriptor",
        "Step 4. Add the custom field object to your API requests",
        "Update the value of a custom field",
        "Payment plans and subscriptions"
      ],
      "plainText": "Prerequisites: Authentication To allow merchants to add their own information to transactions, use the custom fields feature of our API. For example, your merchants can use custom fields to add a credit agreement ID, a magazine subscription name, or an internal customer ID. You can also use the custom fields feature to create dynamic descriptors. A dynamic descriptor is text that appears on the customer's statement with the transaction. For more information about dynamic descriptors, go to Dynamic Descriptors. The following resources on our API support the custom fields feature: Card payments and refunds Bank transfer payments and refunds Subscriptions Secure tokens Integration steps Step 1. Contact us to activate custom fields. Step 2. Create the custom field on the merchant's Self Care Portal. Step 3. (Optional) Set the custom field as a dynamic descriptor. Step 4. Add the custom field to your integration. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Note: If your request is successful but there is an issue with the custom field, we don’t store the custom field and don’t return it in the response. Step 1. Contact us to activate custom fields Before you can use custom fields, contact our Integrations Team to activate the custom fields feature on your account. To contact our Integrations Team, send an email to integrationsupport@payroc.com. Step 2. Create the custom field on the Self Care Portal Log in to the Self Care Portal or the UAT version of the Self Care Portal. From the side menu, select Settings > Custom Fields > NEW CUSTOM FIELD. Enter the following information about the custom field: Name – The name of the custom field. Type – The data type that the Self Care Portal displays for the custom field. Display order – The position of the custom field on the Self Care Portal. For example, if you set the value for the display order to 3, the custom field appears third in the list of custom fields. Label –",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "bankTransferPayment",
          "bankTransferUnreferencedRefund",
          "createPaymentPlan",
          "createSecureToken",
          "createSubscription",
          "paySubscription",
          "payment",
          "unreferencedRefund"
        ]
      }
    },
    {
      "route": "/guides/payments/apple-pay",
      "type": "guide",
      "title": "Apple Pay®",
      "description": "Add Apple Pay to your integration so merchants can accept Apple Pay as a payment method for online transactions.",
      "headings": [
        "How it works",
        "Start an Apple Pay session",
        "Run a sale",
        "Your integration journey",
        "Extend your integration",
        "Guides",
        "Add Apple Pay to your integration",
        "Set up Apple Pay for a merchant",
        "Add a convenience fee",
        "Split a payment with multiple merchants"
      ],
      "plainText": "Prerequisites: Authentication An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Apple Pay® is a digital wallet application that Apple customers can use to store payment card details and to pay for goods and services using their Apple devices. When you add Apple Pay to your integration, your merchants can accept Apple Pay as a payment method for online transactions. When a customer uses Apple Pay to make a payment, your integration communicates with the Apple JS API and the Payroc gateway to make the sale. To simplify your integration, our gateway creates and handles the Apple Pay Certificate that you need to run transactions with Apple Pay. How it works sequenceDiagram participant AP as Apple Pay JS API participant YI as Your integration participant GW as Gateway rect rgba(0, 81, 194, 0.4) Note over AP,GW: Start an Apple Pay session Note over YI: 1. Cardholder chooses to pay with Apple Pay YI->>AP: 2. Request the validation URL AP-->>YI: 3. Return the validation URL YI->>GW: 4. Send the validation URL to the Apple Pay sessions API Note over GW: 5. Start the session with Apple and retrieve the merchant session object GW-->>YI: 6. Return the merchant session object end rect rgba(0, 224, 184, 0.3) Note over AP,GW: Run a sale Note over YI: 1. Cardholder confirms their payment method YI->>AP: 2. Send payment request to Apple Note over AP: 3. Apple encrypts the payment details AP-->>YI: 4. Return encrypted payment details YI->>GW: 5. Send the payment details in a payment request GW-->>YI: 6. Return payment response end Start an Apple Pay session Cardholder chooses to pay with Apple Pay, for example, they select the Apple Pay button on the merchant's web page. Your integration requests the validation URL from Apple. Apple returns the validation URL to your integration. Your integration sends a request to our Apple Pay sessions endpoint. The request must include the unique domainId and validation URL. We start an Apple Pay session and get t",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/apple-pay/add-a-convenience-fee",
      "type": "guide",
      "title": "Add a convenience fee",
      "description": "Apply a convenience fee to Apple Pay payments by including the multiTokenContexts array in your ApplePayPaymentRequest and sending a single payment request to our gateway.",
      "headings": [
        "How it works",
        "Before you begin",
        "Integration steps",
        "Step 1. Update your Apple Pay integration",
        "Request parameters",
        "multiTokenContexts example",
        "Step 2. Send a payment request"
      ],
      "plainText": "Prerequisites: Add Apple Pay to your integration · Set up Apple Pay for a merchant You can extend your Apple Pay integration to add a convenience fee to a payment. How it works You send a request to the Apple Pay JS API that contains the amount for the payment and the amount for the convenience fee. Apple returns a cryptogram after your customer authorizes the total amount. You send a single payment request to our gateway for the total amount of the payment including the convenience fee. Before you begin Integrate with Apple Pay. Set up Apple Pay for the merchant and store their merchant identifier. You must use Apple Pay JS API version 14 or later. Integration steps Update your Apple Pay integration. Send a payment request. Step 1. Update your Apple Pay integration Update your Apple Pay integration to include the multiTokenContexts array with two entries in the ApplePayPaymentRequest. One entry is for the sale amount, and the other entry is for the convenience fee. If your request is successful and the customer authorizes the payment, Apple Pay returns a cryptogram that you need to include in the payment request to our gateway. Request parameters Parameter Description merchantIdentifier Merchant identifier that we assigned when you set up the merchant with Apple Pay. The value is the same for both entries. externalIdentifier ID that our gateway uses to identify the payment and the convenience fee. The value depends on the entry: • For the sale amount, send PRIMARY. • For the convenience fee, send CONVENIENCE_FEE. merchantName Name of the merchant that you set up with Apple Pay. amount Amount for the sale or the convenience fee. multiTokenContexts example \"multiTokenContexts\": [ { \"merchantIdentifier\": \"PMID-2\", \"externalIdentifier\": \"PRIMARY\", \"merchantName\": \"Merchant 1\", \"amount\": \"100.00\" }, { \"merchantIdentifier\": \"PMID-2\", \"externalIdentifier\": \"CONVENIENCE_FEE\", \"merchantName\": \"Merchant 1\", \"amount\": \"2.50\" } ] Step 2. Send a payment request After you receiv",
      "refs": {
        "workflowIds": [
          "accept-apple-pay"
        ],
        "operationIds": [
          "payment"
        ]
      }
    },
    {
      "route": "/guides/payments/apple-pay/apple-pay-integrate",
      "type": "guide",
      "title": "Add Apple Pay to your integration",
      "description": "Integrate Apple Pay by starting a merchant session via the Apple Pay sessions endpoint and running a sale via the Payments endpoint with encrypted digital wallet data.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Headers",
        "Errors",
        "Step 1. Integrate with the Apple JS API",
        "Step 2. Integrate with the Payroc API",
        "Step 2a. Start an Apple Pay session",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 2b. Run a sale",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Next steps"
      ],
      "plainText": "Prerequisites: Authentication Allow your merchants to accept Apple Pay as a payment method. Integration steps Step 1. Integrate with the Apple Pay JS API. Step 2. Integrate with the Payroc API: Step 2a - Start an Apple Pay session. Step 2b - Run a sale. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Headers To create the header of each GET request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. curl -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" To create the header of each POST request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. Idempotency-Key: Include a UUID v4 to make the request idempotent. curl -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" -H \"Idempotency-Key: <UUID v4>\" Errors If your request is unsuccessful, we return an error. For more information about errors, see Errors. Step 1. Integrate with the Apple JS API To integrate with the Apple Pay JS API, go to https://developer.apple.com/apple-pay/. Your integration with Apple must retrieve the following information: Validation URL - Apple provides the validation URL that you send to us when you create an Apple Pay session. Encrypted payment details - Apple encrypts the cardholder's payment details and returns them to your integration. After you receive the encrypted payment details, convert them to hexadecimal. Step 2. Integrate with the Payroc API Use our API to start the merchant session with Apple Pay and retrieve the startSessionResponse object. After you use the Apple Pay JS API to encrypt the cardholder's payment details, use our API to run the sale. Step 2a. Start an Apple Pay session To start an Apple Pay session with Apple, send a request to",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "applePaySessions",
          "payment"
        ]
      }
    },
    {
      "route": "/guides/payments/apple-pay/extend-your-integration",
      "type": "guide",
      "title": "Extend your integration",
      "description": "Extend your Apple Pay integration to add convenience fees or split payments between multiple merchants using the multi-merchant of record function.",
      "headings": [],
      "plainText": "After you set up Apple Pay to run a sale, you can extend your integration to include the following: Split a payment between merchants - Divide a payment with other merchants or third parties. Add a convenience fee - Apply a convenience fee to Apple Pay payments.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/apple-pay/set-up-apple-pay-merchant",
      "type": "guide",
      "title": "Set up Apple Pay for a merchant",
      "description": "Configure Apple Pay for a merchant by adding the domain verification file and registering the domain in the Self-Care Portal to generate a unique merchant domain ID.",
      "headings": [
        "Before you begin",
        "Step 1. Add the domain verification file to the merchant's domain",
        "Step 2. Add the merchant's domain to the Self-Care Portal"
      ],
      "plainText": "Prerequisites: Authentication · Add Apple Pay to your integration After you integrate with the Apple Pay JS API and the Payroc API, you need to set up Apple Pay for each individual merchant. We then generate a unique ID for the merchant's domain that you need to start an Apple Pay session. To set up Apple Pay for a merchant, complete the following steps: Step 1. Add the domain verification file to the merchant's domain. Step 2. Add the merchant's domain to the Self-Care Portal. Before you begin Add the following subfolder to the merchant's domain: /.well-known Step 1. Add the domain verification file to the merchant's domain Log into the Self-Care Portal. From the side menu, select Settings, and then select Apple Pay Domains. Select DOWNLOAD DOMAIN VERIFICATION FILE. Add the file to the merchant's domain in the following subfolder: /.well-known/apple-developer-merchantid-domain-association Important: Do not change the name of the domain verification file. The file name must be apple-developer-merchantid-domain-association. Step 2. Add the merchant's domain to the Self-Care Portal Select ADD NEW DOMAIN. In the Domain field, enter the merchant's domain name, for example, website.com. Select Save. The Self-Care Portal redirects you to the Apple Pay Domains page where it displays the unique ID of the merchant's domain. Important: Store the unique ID of the merchant's domain. You need to send the unique ID when you start an Apple Pay Session. The Self-Care Portal also displays the Merchant Identifier, which you need if you want to add a convenience fee or split a payment with multiple merchants.",
      "refs": {
        "workflowIds": [
          "accept-apple-pay"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/apple-pay/split-a-payment-with-multiple-merchants",
      "type": "guide",
      "title": "Split a payment with multiple merchants",
      "description": "Split an Apple Pay payment between multiple merchants using the multi-merchant of record (MMoR) function by sending the multiTokenContexts array to Apple Pay and individual payment requests to our gateway.",
      "headings": [
        "How it works",
        "Before you begin",
        "Integration steps",
        "Step 1. Update your Apple Pay integration",
        "Request parameters",
        "multiTokenContexts example",
        "Step 2. Send a payment request for each merchant"
      ],
      "plainText": "Prerequisites: Add Apple Pay to your integration · Set up Apple Pay for a merchant If you need to split an Apple Pay payment between multiple merchants or third parties, you can use the multi-merchant of record (MMoR) function within Apple Pay. With MMoR, the cardholder authorizes the total amount once, and then you send the separate amounts to each merchant or third party. How it works You send a request to the Apple Pay JS API that contains the amount for each merchant. Apple returns a cryptogram after your customer authorizes the total amount. You send a payment request to our gateway for each merchant. Each payment request contains the same cryptogram and the amount that the merchant should receive. Before you begin Integrate with Apple Pay. Set up Apple Pay for each merchant and store their merchant identifier. You must use Apple Pay JS API version 14 or later. Integration steps Update your Apple Pay integration. Send a payment request for each merchant. Step 1. Update your Apple Pay integration Update your Apple Pay integration to include the multiTokenContexts array in the ApplePayPaymentRequest. Each entry in the array represents a payment amount to each merchant. If your request is successful and the customer authorizes the payment, Apple Pay returns a cryptogram that you need to include in each payment request to our gateway. Request parameters Parameter Description merchantIdentifier Merchant identifier that we assigned when you set up the merchant with Apple Pay. externalIdentifier Order ID for the payment. This value must match the value for orderId in the payment request. merchantName Name of the merchant that you set up with Apple Pay. amount Amount that each merchant receives from the total amount. multiTokenContexts example \"multiTokenContexts\": [ { \"merchantIdentifier\": \"PMID-101\", \"externalIdentifier\": \"ORDER-A1\", \"merchantName\": \"Merchant 1\", \"amount\": \"100.00\" }, { \"merchantIdentifier\": \"PMID-102\", \"externalIdentifier\": \"ORDER-B7\", \"merchantName",
      "refs": {
        "workflowIds": [
          "accept-apple-pay"
        ],
        "operationIds": [
          "payment"
        ]
      }
    },
    {
      "route": "/guides/payments/close-ach",
      "type": "guide",
      "title": "Close an ACH payment",
      "description": "Close an ACH payment: If NACHA returned an ACH payment and the merchant accepted an alternative payment method, you can use our API to close the return without re-presenting the payment to NACHA.",
      "headings": [
        "How it works",
        "Your integration journey",
        "Things to consider",
        "Errors",
        "Step 1. View the payment details",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 2. Close the return",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)"
      ],
      "plainText": "If NACHA returned an ACH payment and the merchant accepted an alternative payment method, you can use our API to close the return without re-presenting the payment to NACHA. Note: Use this method to permanently close a return. If you want to retry the payment, use our Re-present Payment method instead. How it works We email the merchant to let them know that NACHA returned an ACH payment. Merchant uses an alternative payment method to collect payment from their customer. Merchant uses their POS to close the return. Your integration journey View the payment details. Close the return. Things to consider When you close a return, don't use the paymentId that you use to retrieve the payment. In the response of the Retrieve Payment method, our gateway includes a returns array with a new paymentId, which you need to send in the Close Return request. ... \"returns\": [ { \"paymentId\": \"GIJXAU3WUJ\", \"date\": \"2025-06-23\", \"returnCode\": \"R01\", \"returnReason\": \"Insufficient Funds\", \"represented\": false, \"closed\": false, \"link\": { \"rel\": \"self\", \"method\": \"GET\", \"href\": \"https://api.payroc.com/v1/bank-transfer-payments/GIJXAU3WUJ\" } } ], ... Errors If your request is unsuccessful, we return an error. For more information about errors, see Errors. Step 1. View the payment details To view the details of the return, send a GET request to our Bank Transfer Payments endpoint. Endpoint Prefix URL Test api.uat. https://api.uat.payroc.com/v1/bank-transfer-payments/:paymentId Production api. https://api.payroc.com/v1/bank-transfer-payments/:paymentId Request parameters Schema (request.path) Path parameters for GET /bank-transfer-payments/{paymentId} Example request Request GET https://api.payroc.com/v1/bank-transfer-payments/{paymentId} Store Token Bank Transfer Payment curl https://api.payroc.com/v1/bank-transfer-payments/M2MJOG6O2Y \\ -H \"Authorization: Bearer <token>\" Store Token Bank Transfer Payment import requests url = \"https://api.payroc.com/v1/bank-transfer-payments/M2MJOG6O2Y\" head",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "closeBankTransferPayment",
          "getBankTransferPayment",
          "representBankTransferPayment"
        ]
      }
    },
    {
      "route": "/guides/payments/google-pay",
      "type": "guide",
      "title": "Google Pay",
      "description": "Add Google Pay to your integration so merchants can accept Google Pay as a payment method for online transactions.",
      "headings": [
        "How it works",
        "Guides",
        "Add Google Pay to your integration"
      ],
      "plainText": "Prerequisites: Authentication An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Google Pay® is a digital wallet application that Google customers can use to store payment card details and to pay for goods and services. When you add Google Pay to your integration, your merchants can accept Google Pay as a payment method for online transactions. When a customer uses Google Pay to make a payment, your integration communicates with Google Pay and the Payroc gateway to make the sale. How it works The following diagram shows the flow of a transaction with Google Pay. sequenceDiagram participant GP as Google Pay API participant YI as Your integration participant GW as Gateway rect rgba(0, 81, 194, 0.4) Note over GP,GW: Run a sale Note over YI: 1. Cardholder chooses to pay with Google Pay YI->>GP: 2. Request the cardholder's payment details GP-->>YI: 3. Return the encrypted payment details Note over YI: 4. Convert the payment details to hexadecimal format YI->>GW: 5. Send the payment details in a payment request GW-->>YI: 6. Return payment response end Cardholder chooses to pay with Google Pay, for example, they select the Google Pay button on the merchant's web page. Your integration requests the cardholder's payment details from Google Pay. Google Pay returns the cardholder's encrypted payment details. Your integration converts the cardholder's payment details to hexadecimal format. Your integration sends a request to our Payments endpoint with the cardholder's encrypted payment details in hexadecimal format. Our gateway returns a successful payment response to your integration. Guides Add Google Pay to your integration Run transactions with Google Pay.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/google-pay/google-pay-integrate",
      "type": "guide",
      "title": "Add Google Pay to your integration",
      "description": "Integrate Google Pay by retrieving encrypted payment details from the Google Pay API and submitting them to the POST /v1/payments endpoint with a digitalWallet paymentMethod type.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Headers",
        "Errors",
        "Step 1. Integrate with the Google Pay API",
        "Step 2. Run a sale",
        "Example request",
        "Step 3. Register your integration"
      ],
      "plainText": "Prerequisites: Authentication When a customer uses Google Pay® to pay for goods or services on a merchant’s website or mobile app, use the Google Pay API to retrieve the customer’s encrypted payment details. You can then use our API to run a transaction with the encrypted payment details. Integration steps Integrate with the Google Pay API to retrieve encrypted payment details. Integrate with our API to run transactions. Register your integration. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Headers To create the header of each GET request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. curl -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" To create the header of each POST request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. Idempotency-Key: Include a UUID v4 to make the request idempotent. curl -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" -H \"Idempotency-Key: <UUID v4>\" Errors If your request is unsuccessful, we return an error. For more information about errors, see Errors. Step 1. Integrate with the Google Pay API To integrate with the web version of the Google Pay API, go to https://developers.google.com/pay/api/web/overview. During your integration with the Google Pay API, you need the following: merchantId - Merchant ID that Google assigned to you. gatewayMerchantId - Gateway ID, which is usually your processing terminal ID without the last three characters. For example, if your processingTerminalId is 9876001, your gatewayMerchantId is 9876. gateway – Name of the gateway that processes the transaction. Use the case-sensitive value of worldnet. Note: Payroc now owns the Worldnet gateway and uses it to",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-fields",
      "type": "guide",
      "title": "Hosted Fields",
      "description": "Add secure, gateway-hosted payment fields to your own checkout page design using Hosted Fields.",
      "headings": [
        "How it works",
        "Your integration journey",
        "Extend your integration"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Use our Hosted Fields solution to add payment fields to your checkout page. You control the look and feel of the checkout page, but we host the fields to make them more secure. By integrating with Hosted Fields, you allow the merchant to: Accept payments from cards and bank accounts. Keep the design of their checkout page. Reduce their PCI-DSS compliance requirements. How it works Use our Hosted Fields solution to create a form that the customer uses to enter their payment details. After the customer submits their payment details, we generate a single-use token that represents the details. sequenceDiagram participant M as Merchant participant GW as Gateway rect rgba(0, 81, 194, 0.4) Note over M: 1. Checkout page loads the form with Hosted Fields Note over M: 2. Customer enters and submits their payment details M->>GW: 3. Hosted Fields sends the payment details to the gateway Note over GW: 4. Gateway creates a single-use token GW-->>M: 5. Gateway returns the single-use token Note over M: 6. Use the single-use token in follow-on actions end Your integration journey Authenticate your session - Create a session token to authenticate your integration each time you load Hosted Fields on a webpage. Create a payment form - Use our HTML and our Hosted Fields JavaScript Library to create a payment form. Run a sale - Use the single-use token to run a sale. Extend your integration After you integrate with Hosted Fields to run a sale, you can extend your integration with additional features, for example: Customize your payment form. Close a session. Save a customer's payment details. For more information about how to add these features to your integration, go to Extend your integration.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-fields/add-your-own-fields",
      "type": "guide",
      "title": "Add your own fields",
      "description": "Add your own HTML fields to Hosted Fields to capture extra customer or transaction information, such as address details for address verification.",
      "headings": [
        "Step 1. Add your own HTML fields",
        "Step 2. Validate the data in the fields",
        "Step 2a. Add the onPreSubmit function",
        "Step 2b. Define the onPreSubmit function",
        "displayMissingFieldsError function",
        "Step 3. Handle the response",
        "Step 4. Retrieve the data from the fields",
        "Step 5. Create payment request"
      ],
      "plainText": "You can add your own HTML fields to capture additional information about the customer or the transaction, for example, address information for the address verification service (AVS). After you capture the customer’s address information, you can send it in the payment request. Important: If you add your own HTML fields, you are responsible for handling the additional information that you capture. To help you understand how to add your own fields, we have created a worked example that you can follow. In our example, we capture billing details from the customer and then use the billing details in the payment request. In our example, we complete the following actions: Add our own HTML fields. Validate the data in the fields. Handle the response. Retrieve the data from the fields. Create a payment request. Step 1. Add your own HTML fields In the following code block, we created a <div> to capture the customer's billing details and an error message for each required field. <div class=\"billing-details\"> <!-- First Name and Last Name --> <div class=\"row\" style=\"margin-bottom: -13px;\"> <div> <label for=\"firstName\">First Name</label> <input class=\"input-box\" type=\"text\" id=\"firstName\" required=\"\"> <div class=\"error\" id=\"firstName-error\">*Required</div> </div> <div> <label for=\"lastName\">Last Name</label> <input class=\"input-box\" type=\"text\" id=\"lastName\" required=\"\"> <div class=\"error\" id=\"lastName-error\">*Required</div> </div> </div> <!-- Street Address 1 --> <div> <label for=\"address1\">Street Address</label> <input class=\"input-box\" type=\"text\" id=\"address1\" required=\"\"> <div class=\"error\" id=\"address1-error\">*Required</div> </div> <!-- Street Address 2 --> <div> <label for=\"address2\">Street Address 2</label> <input class=\"input-box\" type=\"text\" id=\"address2\"> <div></div> </div> <!-- City and Postal Code --> <div class=\"row\" style=\"margin-bottom: -13px;\"> <div> <label for=\"city\">City</label> <input class=\"input-box\" type=\"text\" id=\"city\" required=\"\"> <div class=\"error\" id=\"",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-fields"
        ],
        "operationIds": [
          "payment"
        ]
      }
    },
    {
      "route": "/guides/payments/hosted-fields/authenticate-your-session",
      "type": "guide",
      "title": "Authenticate your session",
      "description": "Generate a session token for Hosted Fields by sending a POST request to the Processing Terminals hosted-fields-sessions endpoint using a Bearer token.",
      "headings": [
        "Before you begin",
        "Integration steps",
        "Step 1. Generate a Bearer token",
        "Step 2. Generate a session token from the Bearer token",
        "Request",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). To authenticate your access to the Payroc gateway, include a session token every time you run the Hosted Fields script on a webpage. Before you begin Make sure you have your API key for both the test environment and the production environment. Make sure that your integration can handle errors. If a request is unsuccessful, we return an error that follows the RFC 7807 format. For more information about errors, go to Errors. Integration steps Step 1. Generate a Bearer token. Step 2. Generate a session token from the Bearer token. Step 1. Generate a Bearer token Authenticate your requests to generate a Bearer token. Step 2. Generate a session token from the Bearer token You must use our Hosted Fields Sessions endpoint to generate a new session token each time you initialize Hosted Fields. A session token expires after 10 minutes. When you generate a session token, you need to specify the version of the Hosted Fields JavaScript library that you are using. Include the version number in the libVersion parameter in the body of your request. Environment Version Test 1.7.0.261457 Production 1.7.0.261471 Request To generate a session token, send a POST request to our Processing Terminals endpoint. Environment URL Test https://api.uat.payroc.com/v1/processing-terminals/{processingTerminalId}/hosted-fields-sessions Production https://api.payroc.com/v1/processing-terminals/{processingTerminalId}/hosted-fields-sessions Include the following headers in your request: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. Idempotency-Key: Include a UUID v4 to make the request idempotent. To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /processing-terminals/{processingTerminalId}/hosted-fields-sessions Example request Request POST https://api.payroc.com/v1/p",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createSession"
        ]
      }
    },
    {
      "route": "/guides/payments/hosted-fields/close-session",
      "type": "guide",
      "title": "Close a Hosted Fields session",
      "description": "Call the destroy method in your JavaScript to close an idle Hosted Fields session before starting a new one.",
      "headings": [
        "What does the destroy method do?"
      ],
      "plainText": "Important: To call the destroy method, you must be using one of the following versions of our Hosted Fields JavaScript library: Test - 1.7.0.261457 Production - 1.7.0.261471 To close an idle session of Hosted Fields, call the destroy method in your JavaScript. const hostedFields = new Payroc.hostedFields(options); hostedFields.destroy(); After calling the destroy method, you must start a new Hosted Fields session before you can take payment from the customer. For more information about how to generate a session token, go to Authenticate your Hosted Fields session. Note: You don't need to use this method for every integration, but it is considered good practice in scenarios where Hosted Fields might run on more than one session, for example, in single-page applications. What does the destroy method do? Removes our event listener associated with the session, so that we don't receive messages from more than one session. Prevents further communication between the Hosted Fields JavaScript library and your Hosted Fields. Helps to avoid memory leaks and duplicate event handling.",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-fields"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-fields/create-a-payment-form",
      "type": "guide",
      "title": "Create a payment form",
      "description": "Build a card, ACH, or PAD payment form by adding HTML fields and configuring the Hosted Fields JavaScript library with your session token.",
      "headings": [
        "Before you begin",
        "Integration steps",
        "Step 1. Add HTML for each payment type.",
        "Step 2. Add and configure the JavaScript library",
        "Step 2a. Insert the JavaScript library into your webpage",
        "Step 2b. Configure the JavaScript library",
        "Step 3. Add event listeners",
        "submissionSuccess",
        "Example response",
        "error",
        "Example response",
        "Error messages",
        "config errors",
        "init errors",
        "field errors",
        "submission errors"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). To create a payment form with Hosted Fields you need to add HTML for the fields, and then add and configure our JavaScript library. We provide HTML and JavaScript libraries for the following payment types: Card ACH PAD You also need to add event listeners so that you can receive responses when a customer submits their payment details or if an error occurs. When a customer uses the payment form to submit their payment details, we return a single-use token that you need to run a sale. Before you begin Make sure that your integration can create a session token each time you initialize Hosted Fields. Integration steps Step 1. Add HTML for each payment type. Step 2. Add and configure JavaScript. Step 3. Add event listeners. Step 1. Add HTML for each payment type. Important: Each webpage can support only one payment type. To accept a different payment type, you need to create another webpage. Add the HTML for one of the payment types. Card <div class=\"card-container payroc-form\"> <label for=\"card-holder-name\">Cardholder Name</label> <div class=\"card-holder-name\"></div> <div class=\"card-holder-name-error error-message\"></div> <label for=\"card-number\">Card Number</label> <div class=\"card-number\"></div> <div class=\"card-number-error error-message\"></div> <div class=\"cols-2\"> <div class=\"col\"> <label for=\"card-expiry\">Expires (MM/YY)</label> <div class=\"card-expiry\"></div> <div class=\"card-expiry-error error-message\"></div> </div> <div class=\"card-cvv-wrapper\"> <div class=\"col\"> <label for=\"card-cvv\">CVV</label> <div class=\"card-cvv\"></div> <div class=\"card-cvv-error error-message\"></div> </div> </div> </div> <div class=\"card-submit submit-button\"></div> </div> ACH <div class=\"ach-container payroc-form\"> <div class=\"hosted-fields-message-container\" id=\"hosted-fields-message-container\"></div> <label for=\"ach-account-holder\">Accountholder Name</label> <div class=\"ach-account-holder\"></div> <div ",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-fields/extend-your-integration",
      "type": "guide",
      "title": "Extend your integration",
      "description": "Extend your Hosted Fields integration by styling fields, adding custom fields, closing sessions, and saving payment details.",
      "headings": [
        "Guides",
        "Style your fields",
        "Add your own fields",
        "Close a session",
        "Save a customer's payment details",
        "Update a customer's payment details"
      ],
      "plainText": "After you set up Hosted Fields to run a sale, you can extend your integration to include the following: Style your fields - Change the look and feel of the fields to match your branding, for example, you can update the font and color of the text. Add your own fields - Validate and capture other information, for example, a customer's email address. Close a session - Close an idle session of Hosted Fields if the customer navigates away from the checkout page. Save a customer's payment details - Save a customer's payment details as a secure token that you can use for multiple sales. Update a customer's saved payment details - Update a customer's payment details associated with a secure token. You can run follow-on actions with our API, for example, to view a payment or to void a payment. Guides To extend your Hosted Fields integration, follow our guides: Style your fields Add your own fields Close a session Save a customer's payment details Update a customer's payment details",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-fields/repeat-payments-with-hosted-fields",
      "type": "guide",
      "title": "Repeat payments With Hosted Fields",
      "description": "Set up repeat payments by charging a customer's stored payment token after saving their details with Hosted Fields.",
      "headings": [],
      "plainText": "Prerequisites: Authentication · Save a customer's payment details Important: Before you continue, make sure you have set up your Hosted Fields integration to save a customer's payment details. For more information, go to Save a customer's payment details. After you have set up your integration to store customer payment details with a secure token, you can use the secure token to set up repeat payments. Repeat payments are payments that a merchant agrees to take from a customer on a regular schedule, for example, monthly installments for a large purchase. To extend your integration to include repeat payments, go to our Repeat Payments guides.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-fields/run-a-sale",
      "type": "guide",
      "title": "Run a sale",
      "description": "Run a card or bank account sale using a Hosted Fields single-use token by sending a POST request to the Payments or Bank Transfer Payments endpoint.",
      "headings": [
        "Before you begin",
        "Single-use token",
        "Integration steps",
        "Run a sale with card details",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Run a sale with bank account details",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). After a customer enters their payment details into Hosted Fields, we tokenize them and return a single-use token. To run a sale, use the single-use token with our API. The API method that you need to use depends on the payment type that the single-use token represents, for example, card details or bank account details. Before you begin Single-use token Make sure that your integration can handle submissionSuccess events to receive a single-use token when a customer submits their payment details. Authenticate your requests before making API calls. If your request fails, see Errors. Integration steps The method that you need to use to run the sale depends on the customer's payment type: If the single-use token represents card details, go to Run a sale with card details. If the single-use token represents ACH or PAD details, go to Run a sale with bank account details. Run a sale with card details To run a sale with card details, send a POST request to our Payments endpoint. Environment URL Test https://api.uat.payroc.com/v1/payments Production https://api.payroc.com/v1/payments Request parameters Important: The request includes parameters for functions and features that we don't cover in this guide. These functions and features might require additional integration effort and cost. For more information, contact our Integrations Team at integrationsupport@payroc.com. For the paymentMethod object, send values for the following parameters: type: Send a value of singleUseToken. token: Send the single-use token that you received in the submissionSuccess event. Schema (request.body) Request body schema for POST /payments Example request Request POST https://api.payroc.com/v1/payments Card Payment curl -X POST https://api.payroc.com/v1/payments \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"channel\"",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "bankTransferPayment",
          "payment"
        ]
      }
    },
    {
      "route": "/guides/payments/hosted-fields/run-a-sale-tokenize",
      "type": "guide",
      "title": "Save payment details when running a sale",
      "description": "Save card or bank account payment details when running a sale by sending a POST request to the Payments or Bank Transfer Payments endpoint with a credentialOnFile object.",
      "headings": [
        "Save payment details when running a sale",
        "Before you begin",
        "Integration steps",
        "Save card details when you run a sale",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Save bank account details when you run a sale",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Using the secure token"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale Save payment details when running a sale You can use the single-use token from your existing Hosted Fields integration to save a customer's payment details at the same time that you run a sale. If you save a customer's payment details during a sale, our gateway uses the single-use token from Hosted Fields to charge the customer, and then saves the customer's payment details as a secure token. You can use the secure token multiple times, and it doesn't expire. To tokenize payment details during a sale, you need to send some additional parameters in your request to our API. You don't need to change the JavaScript configuration or authentication for your existing Hosted Fields integration. Before you begin Make sure that you've set up your Hosted Fields integration to run a sale with the single-use token from the submissionSuccess event. For more information, go to Run a sale. Authenticate your requests before making API calls. If your request fails, see Errors. Integration steps The steps that you need to follow depend on whether your single-use token represents card details or bank account details: If the single-use token represents card details, go to Save card details when you run a sale. If the single-use token represents bank account details, go to Save bank account details when you run a sale. Save card details when you run a sale To run a sale and tokenize the card details, you need to update your POST request to our Payments endpoint. Environment URL Test https://api.uat.payroc.com/v1/payments Production https://api.payroc.com/v1/payments Request parameters Important: The request includes parameters for functions and features that we don't cover in this guide. These functions and features might require additional integration effort and cost. For more information, contact our Integrations Team at integrationsupport@payroc.com. To save a customer's card details when you run a sale, update your request to our Payments en",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "bankTransferPayment",
          "payment"
        ]
      }
    },
    {
      "route": "/guides/payments/hosted-fields/save-payment-details",
      "type": "guide",
      "title": "Save a customer's payment details",
      "description": "Convert a Hosted Fields single-use token into a reusable secure token by sending a POST request to the Secure Tokens endpoint, enabling future card and bank account payments without recapturing payment details.",
      "headings": [
        "Before you begin",
        "Integration steps",
        "Step 1. Update the JavaScript configuration",
        "Step 2. Convert the single-use token into a secure token",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Response example",
        "Response (201)",
        "Using the secure token"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). You can update your Hosted Fields integration to save a customer's payment details as a secure token without charging the customer. To tokenize the customer's payment details, you need to update the Hosted Fields JavaScript configuration, and then send a request to our Secure Tokens endpoint. You don't need to change your authentication process for your existing Hosted Fields integration. Before you begin Make sure that you've set up your Hosted Fields integration to handle the single-use token from the submissionSuccess event. For more information, go to Run a sale. Authenticate your requests before making API calls. If your request fails, see Errors. Integration steps Update the JavaScript configuration. Convert the single-use token into a secure token. Step 1. Update the JavaScript configuration In the JavaScript configuration, change the value for the mode parameter from payment to tokenization. Card <script src=\"https://cdn.uat.payroc.com/js/hosted-fields/hosted-fields-1.7.0.261457.js\" integrity=\"sha384-m1A0nfFYa8sAfpDN0d60o4ztd/aCPC2xDVaOT31Urrmn4xypfHqgHQMayZeIK1PM\" crossorigin=\"anonymous\" ></script> <script> const cardForm = new Payroc.hostedFields({ sessionToken: YOUR_SESSION_TOKEN, mode: \"tokenization\", fields: { card: { cardholderName: { target: \".card-holder-name\", errorTarget: \".card-holder-name-error\", placeholder: \"Cardholder Name\", }, cardNumber: { target: \".card-number\", errorTarget: \".card-number-error\", placeholder: \"1234 5678 1234 1211\", }, cvv: { wrapperTarget: \".card-cvv-wrapper\", target: \".card-cvv\", errorTarget: \".card-cvv-error\", placeholder: \"CVV\", }, expiryDate: { target: \".card-expiry\", errorTarget: \".card-expiry-error\", placeholder: \"MM/YY\", }, submit: { target: \".submit-button\", value: \"Submit\", }, }, }, }); padForm.initialize(); </script> ACH <script src=\"https://cdn.uat.payroc.com/js/hosted-fields/hosted-fields-1.7.0.261457.js\" integrity=\"sha384-m1A0nf",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createSecureToken"
        ]
      }
    },
    {
      "route": "/guides/payments/hosted-fields/save-payment-details-overview",
      "type": "guide",
      "title": "Save a customer's payment details",
      "description": "Convert a single-use payment token into a reusable secure token to save a customer's payment details for a future or repeat payment.",
      "headings": [
        "Using the secure token",
        "Use Hosted Fields to save a customer's payment details"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale Important: Make sure that you have set up your Hosted Fields integration to run a sale. For more information, go to Run a sale. When you use Hosted Fields to capture a customer's payment details, we return a single-use token that represents the payment details. You can use the single-use token only once, and it expires 30 minutes after we return it. If you want to save the customer's payment details for a future payment or repeat payments, you need to convert the single-use token into a secure token. You can use the secure token more than once, and it doesn't expire. You can use the secure token as the payment method in follow-up transactions, for example: Faster checkout - Link the secure token with the customer's profile on your merchant's website, so the customer doesn't need to reenter their payment details for a future payment. Repeat payments - Set up recurring payments so that a merchant can take payments from a customer on a regular schedule. Using the secure token After you receive the secure token that represents the customer's payment details, you can use it in follow-up requests to our API, including: Create a card payment Create a bank transfer payment Update a customer's payment details with Hosted Fields Note: You can also use the secure token to set up repeat payments with our gateway, which requires more integration effort and cost. For more information, contact our Integrations Team at integrationsupport@payroc.com. Use Hosted Fields to save a customer's payment details To extend your integration to save a customer's payment details, go to one of the following guides: Save payment details when running a sale - Take payment from the customer and store their payment details in the same transaction. Save payment details without running a sale - Store a customer's payment details without charging the customer.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-fields/styling-hosted-fields",
      "type": "guide",
      "title": "Styling your Hosted Fields",
      "description": "Customize the look of your Hosted Fields payment form by replacing the default CSS and responding to the fieldValidityChange event.",
      "headings": [
        "Default styles",
        "Card form",
        "ACH form",
        "PAD form",
        "Custom styles",
        "Remove the default styles",
        "Default CSS",
        "Supported CSS elements",
        "Supported HTML elements",
        "fieldValidityChange event",
        "Subscribe to the event",
        "Handle the response"
      ],
      "plainText": "We provide you with default styles in Hosted Fields, but you can remove the default styles and add your own custom styles to match the look and feel of the merchant's website. Our styling options include the following: Default styles Custom styles fieldValidityChange event Default styles Our default styles render your form to look like the following: Card form Card form ACH form ACH form PAD form PAD form Custom styles To change the look and feel of the form, update your CSS, for example, the following code changes the color of the submit button on the form to red: styles: { disableDefaultStyles: true, css: { \"button[type='submit']\": { 'background-color': '#d72d2d', 'border-color': '#d72d2d', }, }, } Remove the default styles To remove the default styles, add a styles object to the config of the Hosted Fields JavaScript library with the following: A disableDefaultStyles parameter with a value of true. Your custom styles. styles: { disableDefaultStyles: true, css: { // Custom styles }, }, Default CSS If you add custom styles to your CSS, we recommend that you copy our default CSS and make your changes to it. css: { body: { margin: \"0\", }, form: { display: \"flex\", \"align-items\": \"center\", }, input: { \"line-height\": \"2\", \"box-sizing\": \"border-box\", border: \"1px rgb(158, 158, 158) solid\", width: \"100%\", height: \"100%\", padding: \"8px\", \"border-radius\": \"5px\", \"background-color\": \"#FFF\", color: \"rgb(99, 99, 99)\", \"text-align\": \"left\", \"font-size\": \"0.8rem\", }, label: { padding: \"8px 0\", \"font-family\": \"Arial\", \"font-size\": \"0.8rem\", display: \"inline-block\", }, \":focus\": { outline: \"none\", }, \"::placeholder\": { color: \"rgb(158, 158, 158)\", }, \"input[type='text']\": { \"min-height\": \"45px\", }, \"::before\": { content: \"\", width: \"1rem\", height: \"1rem\", \"flex-basis\": \"1\", \"border-radius\": \"50%\", transform: \"scale(0)\", \"transform-origin\": \"center center\", transition: \"60ms transform ease-in-out\", \"box-shadow\": \"inset 1rem 1rem rgb(23, 134, 97)\", }, \":checked::before\": { transform",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-fields/update-payment-details",
      "type": "guide",
      "title": "Update a customer's payment details",
      "description": "Update a customer's saved payment details by submitting a single-use token from Hosted Fields to the Secure Tokens update-account endpoint.",
      "headings": [
        "Before you begin",
        "Headers",
        "Errors",
        "Integration steps",
        "Step 1. List secure tokens",
        "Request parameters",
        "Schema (request)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 2. Generate a session token",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 3. Update the JavaScript library",
        "Step 4. Update the secure token",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). If a customer uses Hosted Fields to change their payment details, our gateway returns a single-use token that represents the updated payment details. To update the customer’s saved payment details, send the single-use token to our gateway to update the secure token. You can use a single-use token to update only the payment details linked to a secure token. To update the customer’s contact details or the merchant-initiated transaction (MIT) agreement, go to Update a secure token. Before you begin Make sure that you’ve set up your integration to save payment details. Authenticate your requests before making API calls. If your request fails, see Errors. Headers To create the header of each POST request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. Idempotency-Key: Include a UUID v4 to make the request idempotent. -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" -H \"Idempotency-Key: <UUID v4>\" To create the header of each GET request, include the Authorization header parameter. -H \"Authorization: <Bearer token>\" Errors Make sure that your integration can handle errors. If a request is unsuccessful, we return an error that follows the RFC 7807 format. For more information about errors, go to Errors. Integration steps List secure tokens. Generate a session token. Update the JavaScript library. Update the secure token. Step 1. List secure tokens Before you update the customer’s payment details, you need the secureTokenId of the secure token that represents the customer's payments details. To search for the secureTokenId, use our List Secure Tokens method to view all the secure tokens associated with the processing terminal. You can use query parameters to filter your search, for example, you can filter by the customer’s name or email address",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "accountUpdate",
          "createSession",
          "listSecureTokens"
        ]
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page",
      "type": "guide",
      "title": "Collect a payment with the Hosted Payment Page",
      "description": "Redirect your customer to Payroc's hosted checkout; sale, pre-auth, and tokenize variants.",
      "headings": [
        "How it works",
        "Load the hosted payment page"
      ],
      "plainText": "Redirect your customer to Payroc's hosted checkout. Card entry, 3-D Secure, and receipt happen on the hosted page — keeping your PCI scope at SAQ A. The result comes back to your return URL and webhook. How it works Load the hosted payment page Your site → gateway Your site sends a signed form POST that redirects the customer to the HPP. Customer pays Customer → hosted page Card entry and 3-D Secure on the Payroc-hosted page. Result comes back Gateway → your webhook Return URL for the customer; webhook as source of truth. Load the hosted payment page Add a payment button that sends a signed form POST to the gateway — the Load the Hosted Payment Page guide walks through every parameter and the hash that signs it. <form action=\"https://payments.uat.payroc.com/merchant/paymentpage\" method=\"post\"> <input type=\"hidden\" name=\"TERMINALID\" value=\"3204004\" /> <input type=\"hidden\" name=\"ORDERID\" value=\"HPP874417810\" /> <input type=\"hidden\" name=\"CURRENCY\" value=\"USD\" /> <input type=\"hidden\" name=\"AMOUNT\" value=\"10.00\" /> <input type=\"hidden\" name=\"DATETIME\" value=\"09-02-2026:14:37:58:558\" /> <input type=\"hidden\" name=\"HASH\" value=\"…SHA-512 signature…\" /> <input type=\"submit\" value=\"Pay Now\" /> </form> Gotcha — from the workflow spec For a plain sale, do not call capturePayment afterward — the redirect and webhook already settled it. The capture step applies only to the pre-authorization variant. Every request needs a fresh Idempotency-Key Send a unique UUID v4 per request; reusing a key replays the original response instead of charging twice.",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-payment-page"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/authenticate-requests",
      "type": "guide",
      "title": "Authenticate your requests",
      "description": "Create a terminal secret in the Self-Care Portal and build a SHA-512 hash to authenticate your requests to load the Hosted Payment Page.",
      "headings": [
        "Before you begin",
        "Integration steps",
        "Step 1. Create a terminal secret",
        "Step 2. Build and hash the request string",
        "Example",
        "Next steps"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). To load the Hosted Payment Page, you need to include a SHA-512 hash in the HASH parameter. The hash authenticates your request and prevents tampering with sensitive values during transit to our gateway. When the gateway processes your request successfully, it returns the hash in the response. Use the returned hash to verify that the response is legitimate. Before you begin You must have credentials for the Self-Care Portal, which is a self-serve portal that you use to configure terminal settings for your merchant. Use this portal to create a terminal secret. If you don't have credentials for the Self-Care Portal, contact our Integrations Team at integrationsupport@payroc.com. Integration steps Create a terminal secret in the Self-Care Portal. Build the hash string and convert it to SHA-512. Step 1. Create a terminal secret The terminal secret is a shared key between your merchant's website and our gateway. Store it securely and rotate it according to your security policy. Important: Never expose the terminal secret on your merchant's website or mobile app. To create a terminal secret, complete the following steps: Sign in to the Self-Care Portal:Test: https://payments.uat.payroc.com/merchant/selfcare/ Production: https://payments.payroc.com/merchant/selfcare/ From the side menu, select Settings, and then select Terminal. In the Secret field, enter a secret that is between 16 and 48 characters. Use a mixture of letters, numbers, and special characters. Note: If your Hosted Payment Page integration communicates with third-party software, some special characters in the terminal secret can cause issues. Test your integration thoroughly to ensure there are no issues. In the Confirm Secret field, reenter your secret. Select UPDATE SETTINGS. Select OK to confirm that you want to change your terminal secret. Note: Enter a terminal secret in both the test and the production environments to en",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-payment-page"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/background-validation",
      "type": "guide",
      "title": "Implement background validation",
      "description": "Set up a validation URL in the Self-Care Portal and handle the webhook notification our gateway sends to confirm whether it processed a card payment.",
      "headings": [
        "How it works",
        "Before you begin",
        "Integration steps",
        "Step 1. Provide us with the validation URL",
        "Step 2. Handle the webhook notification",
        "Example webhook notification"
      ],
      "plainText": "Important: We strongly recommend that you implement background validation as part of your Hosted Payment Page integration. However, you can’t implement background validation if a customer uses bank account details as a payment method. Background validation is a webhook-based mechanism that confirms whether our gateway processed a card payment. When you implement background validation, our gateway sends an HTTP POST request to a URL called the validation URL. Our gateway sends a notification each time a customer submits their card details on the Hosted Payment Page, whether the payment is successful or unsuccessful. The notification is useful if the connection fails between our gateway and the merchant’s website because the notification confirms whether we received the payment. How it works sequenceDiagram actor C as Customer participant HPP as Hosted Payment Page participant GW as Gateway participant S as Your server C->>HPP: Submit card details HPP->>GW: Process the payment rect rgba(0, 81, 194, 0.4) Note over GW,S: Background validation GW->>S: POST the transaction response to your validation URL alt Your server returns OK S-->>GW: OK Note over GW: Notification confirmed else No OK response loop Retry with exponential backoff, up to 96 hours GW->>S: Retry the notification end Note over GW,S: If every retry fails, the gateway sets the transaction<br />to expired and emails the merchant end end The customer submits their card details on the Hosted Payment Page. Our gateway processes the payment and sends the transaction response to your validation URL as an HTTP POST request. Your server returns the text OK to confirm that it received the notification. If our gateway doesn't receive an OK response, it retries with exponential backoff over 96 hours. If every retry fails, our gateway sets the transaction to expired and emails the merchant. Before you begin You must have credentials for the Self-Care Portal, which is a self-serve portal that you use to configure termin",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-payment-page"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/build-receipt-page",
      "type": "guide",
      "title": "Build the merchant’s receipt page",
      "description": "Build a receipt page that parses the transaction response query parameters the Hosted Payment Page appends and shows the customer a success or decline message.",
      "headings": [
        "Before you begin",
        "Integration steps",
        "Step 1. Provide us with the receipt page URL",
        "Step 2. Handle the transaction response",
        "Card details",
        "Example response",
        "Bank details",
        "Example response",
        "BeadPay details",
        "Example response"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Create a receipt page on the merchant's website to display the transaction response to customers. After the customer makes a payment, the Hosted Payment Page redirects them to the merchant's receipt page and appends the transaction response as query parameters. The receipt page must parse these parameters and display a success or decline message. Note: If a payment is declined, the Hosted Payment Page still redirects the customer to the receipt page and returns the response in the query parameters. Before you begin You must have credentials for the Self-Care Portal, which is a self-serve portal that you use to configure terminal settings for your merchant. Use this portal to provide us with the URL for the receipt page. If you don't have credentials for the Self-Care Portal, contact our Integrations Team at integrationsupport@payroc.com. Integration steps Provide us with the URL of the merchant's receipt page. Handle the transaction response and present the outcome to the customer. Step 1. Provide us with the receipt page URL Provide us with the receipt page URL in the Self-Care Portal so that we know where to redirect customers after they submit their payment details and where to send the transaction response. To provide us with the URL, complete the following steps: Sign in to the Self-Care Portal:Test: https://payments.uat.payroc.com/merchant/selfcare/ Production: https://payments.payroc.com/merchant/selfcare/ From the side menu, select Settings, and then select Terminal. In the Receipt Page URL field, enter the URL of the receipt page. Select UPDATE SETTINGS. Note: Enter the receipt page URL in both the test and the production environments to ensure that you don't have issues when you complete your testing phase and start to run live transactions. Step 2. Handle the transaction response The Hosted Payment Page returns the transaction response as query parameters appended to the r",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-payment-page"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/capture-pre-authorization",
      "type": "guide",
      "title": "Capture the pre-authorization",
      "description": "Capture a pre-authorization by sending a POST request to the Payments capture endpoint with the UNIQUEREF paymentId, optionally specifying an amount to capture a partial value.",
      "headings": [
        "Before you begin",
        "Send a POST request to capture the pre-authorization",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). If your merchant doesn't capture a pre-authorization, it expires and the issuing bank releases the hold on the customer's card. To capture the pre-authorization, you must use our API. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Send a POST request to capture the pre-authorization To capture the pre-authorization, you need the UNIQUEREF that we returned to the merchant's receipt page. Send the UNIQUEREF in the paymentId path parameter in a POST request to our Payments endpoint. Environment URL Test https://api.uat.payroc.com/v1/payments/:paymentId/capture Production https://api.payroc.com/v1/payments/:paymentId/capture Depending on the amount you want to capture: Capture the full amount of the pre-authorization - Don’t send a value for the amount parameter in your request. Capture less than the amount of the pre-authorization - Send a value for the amount parameter in your request. Capture more than the amount of the pre-authorization - Adjust the pre-authorization before you capture it. For more information about adjusting a pre-authorization, go to Adjust Payment. Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /payments/{paymentId}/capture Example request Request POST https://api.payroc.com/v1/payments/{paymentId}/capture Payment capture curl -X POST https://api.payroc.com/v1/payments/M2MJOG6O2Y/capture \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"processingTerminalId\": \"1234001\", \"operator\": \"Jane\", \"amount\": 4999, \"breakdown\": { \"subtotal\": 4999, \"dutyAmount\": 499, \"freightAmount\": 500, \"items\": [ { \"unitPrice\": 4000, \"quantity\": 1 } ] } }' Payment capture import requests url = \"https://api.payroc.com/v1/payments/M2MJOG6O2Y/capture\" pay",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "adjustPayment",
          "capturePayment"
        ]
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/customize-hosted-payment-page",
      "type": "guide",
      "title": "Customize your Hosted Payment Page",
      "description": "Customize the look of your Hosted Payment Page to match the look and feel of your website.",
      "headings": [
        "Step 1. Customize a template",
        "Step 2. Apply the template",
        "Set the template as the default",
        "Apply the template for specific device types"
      ],
      "plainText": "Prerequisites: Authentication You can change the appearance of the Hosted Payment Page to match the styling of your integration. Use the Self-Care Portal to create or edit an existing template, and choose which template you display to users on different devices. When you apply a template, it shows on all Hosted Payment Pages that you've integrated with, for example, if you've extended your integration to run a pre-authorization or to set up subscriptions. Note: You can't edit the validation error messages that we display on the Hosted Payment Page. To edit the appearance of the Hosted Payment Page and display it to a user, complete the following steps: Customize a template. Apply the template. Step 1. Customize a template Log in to the Self-Care Portal: Test: https://payments.uat.payroc.com/merchant/selfcare/ Production: https://payments.payroc.com/merchant/selfcare/. From the navigation menu, select Settings, and then select Pay Pages. Select Add Template to create a new template, or select Edit to make changes to an existing template. Select your editor mode:Basic – Style the page using the editor. Advanced – Edit the CSS directly. Use the editor to configure the template. (Optional) If you have extended your integration to run pre-authorizations, tokenize payment details, or set up subscriptions, use the Preview dropdown menu to preview your changes for each type of Hosted Payment Page. (Optional) If your account uses Level 3 enhanced data, enable Display Enhanced Data to show itemized transaction details on the payment page. Select Save Changes. Step 2. Apply the template After you create a template, you must indicate if it is the default. You can also specify if you want to apply the template only on a specific device type, for example, when a user accesses the Hosted Payment Page from a mobile device. Set the template as the default You can set only one template as the default. When you load the Hosted Payment Page, we display the default template automaticall",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/extend-your-integration",
      "type": "guide",
      "title": "Extend your integration",
      "description": "Explore guides for extending a Hosted Payment Page integration, including pre-authorizations, saving payment details, repeat payments, and background validation.",
      "headings": [
        "Guides",
        "Run a pre-authorization",
        "Save a customer's payment details",
        "Set up repeat payments",
        "Implement background validation"
      ],
      "plainText": "Prerequisites: Authentication After you set up the Hosted Payment Page to run a sale, you can extend your integration to include the following: Run a pre-authorization - Hold an amount on a customer's card and then capture the payment later. Save a customer's payment details - Store customer payment details for use in future transactions. Set up repeat payments - Create payment plans and subscribe your customers to them to accept regular, scheduled payments. Implement background validation - Check if our gateway processed a card payment. Guides To extend your Hosted Payment Page integration, follow our guides: Run a pre-authorization Save a customer's payment details Set up repeat payments Implement background validation",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/integration-overview",
      "type": "guide",
      "title": "Hosted Payment Page",
      "description": "Learn how the Hosted Payment Page works and follow the integration journey to run a sale, then extend your integration with optional features.",
      "headings": [
        "How it works",
        "Your integration journey",
        "Extend your integration"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Use our Hosted Payment Page solution to add a secure payment page to your checkout. When a customer is ready to pay, redirect them to an external payment page that we host where they can submit their payment details. We then securely process the transaction and return the transaction response. Because we host the payment page and handle the sensitive payment details, your integration does not need to process or store the payment details. This reduces the merchant's PCI compliance scope while still allowing them to accept payments online. How it works sequenceDiagram participant W as Website participant GW as Gateway participant HPP as Hosted Payment Page rect rgba(0, 81, 194, 0.4) Note over W: 1. Customer selects button to pay W->>GW: 2. Send transaction request Note over GW: 3. Authenticate the request GW->>HPP: 4. Load the Hosted Payment Page Note over HPP: 5. Customer submits their payment details HPP->>GW: 6. Send transaction details Note over GW: 7. Send transaction details to the processor Note over GW: 8. Processor returns a response for the transaction GW-->>W: 9. Send transaction response Note over W: 10. Display transaction response to the customer end Customer selects button to pay on the merchant's website. Button sends a transaction request to our gateway for authentication and to load the Hosted Payment Page. Gateway validates the request. Gateway loads the Hosted Payment Page and redirects the customer. Customer submits their payment details on the Hosted Payment Page. Hosted Payment Page sends the transaction details to our gateway. Gateway sends the transaction details to the processor. Processor returns a response for the transaction. Gateway sends the transaction response to the merchant's website. Merchant's website displays the transaction response to the customer. Your integration journey To run a sale with the Hosted Payments Page, complete the following steps:",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/load-payment-page",
      "type": "guide",
      "title": "Load the Hosted Payment Page",
      "description": "Add a button that sends a POST request with the transaction details and SHA-512 hash to load the Hosted Payment Page for the customer.",
      "headings": [
        "Before you begin",
        "Send a POST request to load the Hosted Payment Page",
        "Request parameters",
        "Example request",
        "Errors",
        "INVALID HASH",
        "Validation Errors",
        "Next steps"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). When your customer is ready to pay, you need to load the Hosted Payment Page. To do this, add a button to your checkout page that sends a POST request to our gateway. When we receive the POST request, the Hosted Payment Page loads and the customer can submit their payment details. Note: The Hosted Payment Page doesn't return a transaction type in the transaction response. Because you can run sales, run pre-authorizations, and save a customer's payment details, we recommend that you record the transaction type in your system. Before you begin Make sure you have the unique identifier that we assigned to the merchant's terminal. Send this in your POST request in the TERMINALID parameter. Send a POST request to load the Hosted Payment Page To load the page, send a POST request to the Payment Page URL. Environment URL Test https://payments.uat.payroc.com/merchant/paymentpage Production https://payments.payroc.com/merchant/paymentpage Request parameters To create the body of your request, use the following parameters: Parameter Type Size Description TERMINALID String 1-50 characters Unique identifier that we assigned to the terminal. ORDERID String 1-24 characters Unique identifier that the merchant assigns to the transaction. CURRENCY String 3 characters Currency of the transaction. The value for the currency follows the ISO 4217 standard. AMOUNT Double Subtotal of the transaction including taxes. Don't include surcharges or convenience fees. DATETIME String Date and time that you send the request. Send this value in DD-MM-YYYY:HH:MM:SS:SSS format, for example, 06-02-2026:12:23:23:719. HASH String 1-128 characters SHA-512 hash value that you generate with values from the request parameters and the terminal secret. For more information about how to create your HASH, go to Authenticate your requests. Example request <html> <body> <form action=\"https://payments.uat.payroc.com/merchant/paymen",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-payment-page"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/overview",
      "type": "guide",
      "title": "Hosted Payment Page",
      "description": "Learn how the Hosted Payment Page works and follow the integration journey to run a sale, then extend your integration with optional features.",
      "headings": [
        "How it works",
        "Your integration journey",
        "Extend your integration"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Use our Hosted Payment Page solution to add a secure payment page to your checkout. When a customer is ready to pay, redirect them to an external payment page that we host where they can submit their payment details. We then securely process the transaction and return the transaction response. Because we host the payment page and handle the sensitive payment details, your integration does not need to process or store the payment details. This reduces the merchant's PCI compliance scope while still allowing them to accept payments online. How it works sequenceDiagram participant W as Website participant GW as Gateway participant HPP as Hosted Payment Page rect rgba(0, 81, 194, 0.4) Note over W: 1. Customer selects button to pay W->>GW: 2. Send transaction request Note over GW: 3. Authenticate the request GW->>HPP: 4. Load the Hosted Payment Page Note over HPP: 5. Customer submits their payment details HPP->>GW: 6. Send transaction details Note over GW: 7. Send transaction details to the processor Note over GW: 8. Processor returns a response for the transaction GW-->>W: 9. Send transaction response Note over W: 10. Display transaction response to the customer end Customer selects button to pay on the merchant's website. Button sends a transaction request to our gateway for authentication and to load the Hosted Payment Page. Gateway validates the request. Gateway loads the Hosted Payment Page and redirects the customer. Customer submits their payment details on the Hosted Payment Page. Hosted Payment Page sends the transaction details to our gateway. Gateway sends the transaction details to the processor. Processor returns a response for the transaction. Gateway sends the transaction response to the merchant's website. Merchant's website displays the transaction response to the customer. Your integration journey To run a sale with the Hosted Payments Page, complete the following steps:",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/pre-authorization",
      "type": "guide",
      "title": "Run a pre-authorization",
      "description": "Run a pre-authorization on the Hosted Payment Page to hold an amount on a customer's card before your merchant captures it later",
      "headings": [
        "Integration journey"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Use the Hosted Payment Page to run a pre-authorization. Your merchant runs a pre-authorization to hold an amount on a customer's card, which your merchant then captures later. If your merchant doesn't capture a pre-authorization, it expires and the issuing bank releases the hold on the customer's card. Your merchant can't run pre-authorizations if they: Use a dual pricing or a surcharging program Apply convenience fees to transactions Your merchant can't run a pre-authorization if the customer uses bank account details. If a customer submits bank account details, our gateway runs a sale instead of a pre-authorization. Integration journey Authenticate your requests Load the Hosted Payment Page Build the merchant's receipt page Capture the pre-authorization",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/preauth-authenticate-requests",
      "type": "guide",
      "title": "Authenticate your requests",
      "description": "Authenticate a pre-authorization request on the Hosted Payment Page by reusing the same SHA-512 hash setup you built to run a sale",
      "headings": [
        "Next steps"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). To load the Hosted Payment Page, you need to include a SHA-512 hash in the HASH parameter. The hash authenticates your request and prevents tampering with sensitive values during transit to our gateway. Because you've already integrated with Hosted Payment pages to run a sale, you've completed the following steps: Created a terminal secret Created a dynamic hash function You don't need to do anything as the required parameter values for the hash to run a pre-authorization are the same as the parameter values to run a sale. Next steps Load the Hosted Payment Page",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/preauth-build-receipt-page",
      "type": "guide",
      "title": "Build the merchant’s receipt page",
      "description": "Build a receipt page that reads the query parameters the Hosted Payment Page appends after a pre-authorization, including the UNIQUEREF you need to capture it later",
      "headings": [
        "Before you begin",
        "Handle the transaction response",
        "Card details",
        "Example response"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Create a receipt page on the merchant's website to display the transaction response to customers. After the customer submits their payment details, the Hosted Payment Page redirects them to the merchant's receipt page and appends the transaction response as query parameters. The receipt page must parse these parameters and display a success or decline message. Note: If a pre-authorization is declined, the Hosted Payment Page still redirects the customer to the receipt page and returns the response in the query parameters. Before you begin If you've already integrated with run a sale, you've completed the following steps: You've provided us with the URL of the merchant's receipt page. You've handled the response parameters to run a sale, which are the same for running pre-authorizations. We’ve included them below. However, you must store the UNIQUEREF from the response so you can capture the pre-authorization later. Handle the transaction response The Hosted Payment Page returns the transaction response as query parameters appended to the receipt page URL. Card details Parameter Type Size Description TERMINALID String 1-50 characters Unique identifier that we assigned to the terminal. ORDERID String 1-24 characters Unique identifier that the merchant assigned to the transaction. APPROVALCODE String 0-48 characters Authorization code that the processor assigned to the transaction. AMOUNT Double Subtotal of the transaction including taxes. This value doesn't include surcharges or convenience fees. RESPONSECODE Enum Response code for the transaction from the processor. The value is one of the following: - A - Processor approved the transaction. - E - Processor authorized the transaction. This enum applies to only China UnionPay cards. - D - Processor declined the transaction. - R - Processor declined the transaction, and the customer should contact their bank. - C - Processor declined th",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/preauth-load-payment-page",
      "type": "guide",
      "title": "Load the Hosted Payment Page",
      "description": "Load the Hosted Payment Page for a pre-authorization by sending a POST request to the Pre-authorization Page URL with a signed HASH parameter",
      "headings": [
        "Before you begin",
        "Send a POST request to load the Hosted Payment Page",
        "Request parameters",
        "Example request",
        "Errors",
        "INVALID HASH",
        "Validation Errors",
        "Next steps"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). When your customer is ready to enter their payment details, load the Hosted Payment Page. To do this, add a button to your checkout page that sends a POST request to our gateway. When we receive the POST request, the Hosted Payment Page loads and the customer can submit their payment details. Note: The Hosted Payment Page doesn't return a transaction type in the transaction response. Because you can run sales, run pre-authorizations, and save a customer's payment details, we recommend that you record the transaction type in your system. Before you begin If you've already integrated with Hosted Payment Pages run a sale, the request parameters for running a pre-authorization are the same as the parameters for running a sale, but the URLs are different. Send a POST request to load the Hosted Payment Page To load the page, send a POST request to the Pre-authorization Page URL. Environment URL Test https://payments.uat.payroc.com/merchant/preauthpage Production https://payments.payroc.com/merchant/preauthpage Request parameters To create the body of your request, use the following parameters: Parameter Type Size Description TERMINALID String 1-50 characters Unique identifier that we assigned to the terminal. ORDERID String 1-24 characters Unique identifier that the merchant assigns to the transaction. CURRENCY String 3 characters Currency of the transaction. The value for the currency follows the ISO 4217 standard. AMOUNT Double Subtotal of the transaction including taxes. Don't include surcharges or convenience fees. DATETIME String Date and time that you send the request. Send this value in DD-MM-YYYY:HH:MM:SS:SSS format, for example, 06-02-2026:12:23:23:719. HASH String 1-128 characters SHA-512 hash value that you generate with values from the request parameters and the terminal secret. For more information about how to create your HASH, go to Authenticate your requests. Example reques",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-payment-page"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/save-details-authenticate-requests",
      "type": "guide",
      "title": "Authenticate your requests",
      "description": "Build the SHA-512 hash string needed to authenticate a request that saves a customer's payment details on the Hosted Payment Page",
      "headings": [
        "Build and hash the request string",
        "Next steps"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). To load the Hosted Payment Page, you need to include a SHA-512 hash in the HASH parameter. The hash authenticates your request and prevents tampering with sensitive values during transit to our gateway. Because you've already integrated with Hosted Payment Pages to run a sale, you've already added a terminal secret. However, the hash string for saving a customer's payment details is made up of different values. Build and hash the request string Create a colon-delimited string from specific request parameter values, append your terminal secret, and then convert the string to a SHA-512 hash. To create the hash string to save a customer's payment details, complete the following steps: Build your hash with your parameter values in the following order:[TERMINALID]:[MERCHANTREF]:[DATETIME]:[ACTION]:[SECRET] Replace the placeholders with actual values:3204004:561234:10-02-2026:09:14:54:058:register:example_secret_123 Use a hashing library in your programming language to convert the string to a SHA-512 hash:a674cad40ad2c6bb9421c053e254dbe5fa49335babd0360e15a7875b43c1dedb880df5ca000946a1376237a039bd36c33758c1a3a4c396a324d2534fbddacb44 You send this value in the HASH parameter of your request to load the Hosted Payment Page. Next steps Load the Hosted Payment Page",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/save-details-build-receipt-page",
      "type": "guide",
      "title": "Build the merchant’s receipt page",
      "description": "Build a receipt page that reads the CARDREFERENCE and MERCHANTREF query parameters the Hosted Payment Page returns after saving a customer's payment details",
      "headings": [
        "Before you begin",
        "Integration steps",
        "Step 1. Provide us with the URL of the merchant's receipt page.",
        "Step 2. Handle the transaction response",
        "Query parameters"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Create a receipt page on the merchant's website to display the transaction response to customers. After the customer submits their payment details, the Hosted Payment Page redirects them to the merchant's receipt page and appends the transaction response as query parameters. The receipt page must parse these parameters and display a success or decline message. Note: If there is an issue with saving the customer's payment details, the Hosted Payment Page still redirects the customer to the receipt page and returns the response in the query parameters. Before you begin You must have credentials for the Self-Care Portal, which is a self-serve portal that you use to configure terminal settings for your merchant. Use this portal to provide us with the URL for the receipt page. If you don't have credentials for the Self-Care Portal, contact our Integrations Team at integrationsupport@payroc.com. Integration steps Provide us with the URL of the merchant's receipt page. Handle the transaction response and present the outcome to the customer. Step 1. Provide us with the URL of the merchant's receipt page. Important: You must provide us with a URL that we redirect your customer to when they save their payment details. This URL is not the same as the receipt page URL you set up for sales and pre-authorizations. Provide us with the receipt page URL in the Self-Care Portal so that we know where to redirect customers after they submit their payment details and where to send the transaction response. To provide us with the URL, complete the following steps: Sign in to the Self-Care Portal:Test: https://payments.uat.payroc.com/merchant/selfcare/ Production: https://payments.payroc.com/merchant/selfcare/ From the side menu, select Settings, and then select Terminal. In the Secure Token URL field, enter the URL of the receipt page. Select UPDATE SETTINGS. Note: Enter the receipt page URL in both the t",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-payment-page"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/save-details-load-payment-page",
      "type": "guide",
      "title": "Load the Hosted Payment Page",
      "description": "Load the Hosted Payment Page to save or update a customer's payment details by sending a POST request to the Secure Card Page URL with a signed HASH parameter",
      "headings": [
        "Send a POST request to load the Hosted Payment Page",
        "Request parameters",
        "Next steps"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). When your customer wants to save their payment details, load the Hosted Payment Page. To do this, add a button to your checkout page that sends a POST request to our gateway. When we receive the POST request, the Hosted Payment Page loads and the customer can submit their payment details. Note: The Hosted Payment Page doesn't return a transaction type in the transaction response. Because you can run sales, run pre-authorizations, and save a customer's payment details, we recommend that you record the transaction type in your system. You can also use this page to update a customer's payment details. When you load the Hosted Payment Page, provide the MERCHANTREF to indicate the customer's secure token that you want to update and send a value for the ACTION parameter of update instead of register. Send a POST request to load the Hosted Payment Page To load the page, send a POST request to the Secure Card Page URL. Environment URL Test https://payments.uat.payroc.com/merchant/securecardpage Production https://payments.payroc.com/merchant/securecardpage Request parameters To create the body of your request, use the following parameters: Parameter Type Size Description ACTION Enum Indicates if the customer is saving new payment details or if they are updating existing payment details. The value is one of the following: - register - Customer is saving new payment details. - update - Customer is updating existing payment details. TERMINALID String 1-50 characters Unique identifier that we assigned to the terminal. MERCHANTREF String 1-200 characters Unique identifier that the merchant assigns to the secure token. Note: We recommend that you store this value. DATETIME String Date and time that you send the request. Send this value in DD-MM-YYYY:HH:MM:SS:SSS format, for example, 06-02-2026:12:23:23:719. HASH String 1-128 characters SHA-512 hash value that you generate with values from the requ",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-payment-page"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/save-payment-details",
      "type": "guide",
      "title": "Save a Customer’s Payment Details",
      "description": "Save a customer's card or bank details on the Hosted Payment Page and get back a secure token you can use for follow-on transactions",
      "headings": [
        "Integration journey"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Use the Hosted Payment Page to save a customer’s payment details. When the customer submits their card or bank details, we store the payment information in our vault and return a secure token. Your integration needs to store this secure token and associate it with your customer, then the merchant or the customer can use it in follow-on transactions. Integration journey Authenticate your requests Load the Hosted Payment Page Build the merchant’s receipt page",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/hosted-payment-page/set-up-repeat-payments",
      "type": "guide",
      "title": "Set up repeat payments",
      "description": "Set up repeat payments via the Hosted Payment Page by creating a payment plan and subscription using POST requests to the Payment Plans and Subscriptions endpoints.",
      "headings": [
        "How it works",
        "Integration journey",
        "Before you begin",
        "Step 1. Save a customer's payment details",
        "Step 2. Create a payment plan",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 3. Create a subscription",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 4. (Optional) Manually collect a payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)"
      ],
      "plainText": "Prerequisites: Authentication · Save a Customer’s Payment Details An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Repeat payments are payments that a merchant takes from a customer on a regular schedule. For example, a merchant can offer a monthly product such as a magazine subscription or a merchant can allow customers to split large payments into smaller regular payments. To schedule repeat payments, you need to complete the following steps: Save the customer's payment details to use instead of their raw payment details. Create a payment plan to indicate how a merchant takes payments from their customer. It defines the frequency, amount, length, and collection method for each payment. Use a subscription to assign a customer to a payment plan. A merchant can personalize a subscription for a specific customer, for example, add a discount or collect a one-off setup fee. How it works sequenceDiagram actor C as Customer participant HPP as Hosted Payment Page participant MS as Merchant's server participant GW as Gateway rect rgba(0, 81, 194, 0.4) Note over C,HPP: Step 1 — Save payment details C->>HPP: Enter card details HPP->>GW: Tokenize card GW-->>HPP: CARDREFERENCE HPP-->>MS: Redirect with CARDREFERENCE Note right of MS: Store CARDREFERENCE end rect rgba(0, 224, 184, 0.3) Note over MS,GW: Step 2 — Create payment plan MS->>GW: POST /payment-plans Note over MS,GW: name, currency, type, frequency,<br />length, recurringOrder.amount GW-->>MS: paymentPlanId Note right of MS: Store paymentPlanId end rect rgba(0, 224, 184, 0.3) Note over MS,GW: Step 3 — Create subscription MS->>GW: POST /subscriptions Note over MS,GW: paymentPlanId,<br />paymentMethod.secureToken.token = CARDREFERENCE,<br />startDate GW-->>MS: subscriptionId Note right of MS: Store subscriptionId end rect rgba(0, 224, 184, 0.3) Note over MS,GW: Step 4 — Collect payments alt Automatic plan GW-->>C: Gateway collects on schedule else Manual plan MS->>GW: POST /subscriptions/",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createPaymentPlan",
          "createSubscription",
          "paySubscription"
        ]
      }
    },
    {
      "route": "/guides/payments/payment-links",
      "type": "guide",
      "title": "Payment Links",
      "description": "Explains how to use Payment Links to create a hosted payment page that a merchant can share with a customer",
      "headings": [
        "How it works",
        "Your integration journey",
        "Extend your integration"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Use our Payment Links solution to create a payment link that a merchant can share with a customer. The customer uses the payment link to open a payment page that we host. You can configure a payment link to do the following actions: Take a single payment or multiple payments from one or more customers. Run a sale or a pre-authorization. Accept card payments, bank transfers, or both. Set a fixed payment amount or ask the customer to enter the amount. How it works After a merchant creates a payment link and shares it with a customer, our gateway sends the link to the customer by email. The customer selects the link to open a hosted payment page, where they submit their payment details. Your integration journey To get started with Payment Links, go to Create and share a payment link. Extend your integration After you set up your integration to create and share a payment link, you can extend your integration with additional features, for example: Update a payment link. Retrieve a link's sharing events. For more information about how to add these features to your integration, go to Extend your integration.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payment-links/create-share-link",
      "type": "guide",
      "title": "Create and share a payment link",
      "description": "Create a payment link and share it with customers by sending POST requests to the Processing Terminals and Payment Links endpoints.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Headers",
        "Errors",
        "Step 1. Create a payment link",
        "Request parameters",
        "Example request",
        "Response fields",
        "Example response",
        "Step 2. Share a payment link",
        "Request parameters",
        "Example request",
        "Response fields",
        "Example response"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). Use our Payment Links feature to create a payment link that the merchant can email to customers to pay for goods and services. The request to create a payment link contains the following settings for the payment link: type - Indicates whether the link can be used only once or if it can be used multiple times. authType - Indicates whether the transaction is a sale or a pre-authorization. paymentMethod - Indicates the payment methods that the merchant accepts. charge - Indicates whether the merchant or customer enters the amount for the transaction. When the gateway creates the link, it returns the paymentLinkId that you use in the request to share the payment link. Integration steps Step 1. Create a payment link. \\ Step 2. Share a payment link. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Headers To create the header of each GET request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. curl -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" To create the header of each POST request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. Idempotency-Key: Include a UUID v4 to make the request idempotent. curl -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" -H \"Idempotency-Key: <UUID v4>\" Errors If your request is unsuccessful, we return an error. For more information about errors, see Errors. Step 1. Create a payment link To create a payment link, send a POST request to our Processing Terminals endpoint. Environment URL Test https://api.uat.payroc.com/v1/processing-terminals/{processingTerminalId}/payment-links Production https://api.payroc.com/",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createPaymentLink",
          "sharePaymentLink"
        ]
      }
    },
    {
      "route": "/guides/payments/payment-links/extend-your-integration",
      "type": "guide",
      "title": "Extend your integration",
      "description": "Extend a payment links integration by sharing, updating, retrieving, listing, or deactivating payment links",
      "headings": [],
      "plainText": "Prerequisites: Authentication An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). After you set up your integration to create and share a payment link, you extend your integration to include the following: Share a link — Send an existing payment link to one or more customers by email. Update a link — Update a payment link, for example, its expiration date. Retrieve a link — Retrieve the details of a payment link. Retrieve a list of links - Retrieve a paginated list of payment links that are associated with a processing terminal. Retrieve a link's sharing events — Retrieve a paginated list of the times that a merchant shared a payment link. Deactivate a link — Deactivate a payment link.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "deactivatePaymentLink",
          "listPaymentLinkShareEvents",
          "listPaymentLinks",
          "retrievePaymentLink",
          "sharePaymentLink",
          "updatePaymentLink"
        ]
      }
    },
    {
      "route": "/guides/payments/payroc-cloud",
      "type": "guide",
      "title": "Payroc Cloud",
      "description": "Explore guides for configuring your payment device, running a sale, and extending your Payroc Cloud integration with refunds and signature capture.",
      "headings": [
        "Your integration journey",
        "Extend your integration"
      ],
      "plainText": "Payroc Cloud is our semi-integrated solution that you can use to send instructions to a payment device without the need for a direct connection between the Point of Sale (POS) and the payment device. An instruction contains information that the device uses to perform actions, for example, if the merchant wants to run a sale, the instruction includes the amount of the sale. There are three Payroc Cloud solutions that you can integrate with, depending on your merchants' requirements: Android payment device with the Payroc App and your POS app. Android payment device with the Payroc App, with your POS system on a different device. Non-Android payment device, with your POS system on a different device. We support Ingenico payment devices and ID TECH payment devices. Your integration journey Configure your payment device:Android (POS on the same device) Android (POS on a separate device) Ingenico ID TECH Use our API to send instructions to run a sale. (Optional) Test your integration with our Payroc Cloud Simulator. Extend your integration After you integrate with Payroc Cloud to run a sale, you can extend your integration to include the following: Run an unreferenced refund Capture a signature For more information about how to extend your integration, go to Extend your integration.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/capture-signature",
      "type": "guide",
      "title": "Capture a signature",
      "description": "Capture a cardholder's signature on a Payroc Cloud device by submitting a signature instruction, polling for its status, and retrieving the captured signature image.",
      "headings": [
        "Before you begin",
        "Step 1. Submit a signature instruction",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (202)",
        "Step 2. View the status of a signature instruction",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 3. View the signature capture",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "(Optional) Cancel a signature instruction",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Schema",
        "Response"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). After you configure a device for Payroc Cloud, program your POS to use the Submit Signature Instruction method to send a signature instruction to the payment device. To capture a cardholder’s signature, complete the following: Submit a signature instruction to the device. View the status of the signature instruction. View the signature. You can also cancel a signature instruction if it hasn’t yet completed. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. Submit a signature instruction To submit a signature instruction to a device, send a POST request to the Devices endpoint. Environment URL Test https://api.uat.payroc.com/v1/devices/{serialNumber}/signature-instructions Production https://api.payroc.com/v1/devices/{serialNumber}/signature-instructions Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /devices/{serialNumber}/signature-instructions Example request Request POST https://api.payroc.com/v1/devices/{serialNumber}/signature-instructions Signature Instruction curl -X POST https://api.payroc.com/v1/devices/1850010868/signature-instructions \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"processingTerminalId\": \"1234001\" }' Signature Instruction import requests url = \"https://api.payroc.com/v1/devices/1850010868/signature-instructions\" payload = { \"processingTerminalId\": \"1234001\" } headers = { \"Idempotency-Key\": \"8e03978e-40d5-43e8-bc93-6894a57f9324\", \"Authorization\": \"Bearer <token>\", \"Content-Type\": \"application/json\" } response = requests.post(url, json=payload, headers=headers) print(response.json()) Signature Instruction const url = 'https://api.payroc.com/v1/devices/1850010868/signature-instructions'; const options = { method: 'P",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "deleteSignatureInstruction",
          "getSignatureInstruction",
          "retrieveSignature",
          "sendSignatureInstruction"
        ]
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/device-setup",
      "type": "guide",
      "title": "Device setup",
      "description": "Configure ID TECH and Ingenico devices.",
      "headings": [],
      "plainText": "Configure ID TECH and Ingenico devices. ID TECH - Linux ID TECH - Windows Ingenico - Linux Ingenico - Windows Android (POS on a different device) Android (POS on the same device) ID TECH Ingenico",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/device-setup/android-diff-device",
      "type": "guide",
      "title": "Android (POS on a different device)",
      "description": "Connect your POS to an Android payment device running the Payroc App over the internet, so the app can process payments while your POS handles checkout.",
      "headings": [
        "How it works",
        "Integration journey"
      ],
      "plainText": "Use our Android (POS on a separate device) configuration to connect your POS to an Android payment device that is running the Payroc App. Your POS and the payment device don't need to be on the same network or in the same location, but they must be connected to the internet. Your POS system manages the checkout experience and sends instructions to the payment device, while the Payroc App processes the payment. How it works The following diagram describes the flow of a transaction between your POS, our gateway, and the payment device. sequenceDiagram participant POS as POS participant GW as Gateway participant D as Device rect rgba(0, 81, 194, 0.4) Note over POS,D: Initiate a transaction POS->>GW: 1. Create instruction GW->>D: 2. Send instruction to device D-->>GW: 3. Confirm delivery of instruction GW-->>POS: 4. Confirm that the device accepted the instruction end rect rgba(0, 224, 184, 0.3) Note over POS,D: Run the transaction Note over D: 1. Device captures the card information D->>GW: 2. Send transaction details Note over GW: 3. Gateway sends transaction details to the processor Note over GW: 4. Processor returns a response for the transaction GW-->>D: 5. Send transaction response end rect rgba(0, 81, 194, 0.4) Note over POS,D: Get a link to the transaction POS->>GW: 1. Get the status of the instruction GW-->>POS: 2. Return instruction with a link to the transaction end rect rgba(0, 224, 184, 0.3) Note over POS,D: View the transaction POS->>GW: 1. View details of the transaction GW-->>POS: 2. Return details of the transaction end Initiate a transaction Your POS sends an instruction to our gateway. Our gateway passes the instruction to the payment device. The payment device confirms that it has received the instruction. Our gateway sends a response to your POS that contains an identifier for the instruction. Run the transaction The payment device captures the card details. The payment device sends the transaction details to our gateway. Our gateway sends the trans",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/device-setup/android-same-device",
      "type": "guide",
      "title": "Android (POS on the same device)",
      "description": "Configure your Android payment device to run your POS app and the Payroc App together, including permissions, app switching, and Paxstore upload.",
      "headings": [
        "How it works",
        "Integration journey",
        "Configure the payment device",
        "Integration steps",
        "Step 1. Adjust the permissions on the payment device",
        "Step 2. Update the Payroc App",
        "Step 3. Configure your activity to run a single task",
        "Step 4. (Optional) Set the Payroc App to start first",
        "Step 5. Handle App switching",
        "Start the Payroc App service",
        "Switch from your POS App to the Payroc App",
        "Switch from the Payroc App to your POS App",
        "Step 6. Upload your POS App to the Paxstore",
        "Next steps"
      ],
      "plainText": "Use our Android (POS on same device) configuration to run your POS app and our Payroc App on the same payment device. Your POS app manages the checkout experience, while our Payroc App securely processes the payment on the device. Because both apps run on one device, your integration must manage how they interact. This includes preparing the Payroc App to receive payment instructions and switching between the two apps when a transaction is in progress. How it works The following diagram describes the flow of a transaction between your POS app, our gateway, and the Payroc App. sequenceDiagram participant POS as POS app participant GW as Gateway participant PA as Payroc app rect rgba(0, 81, 194, 0.4) Note over POS,PA: Initiate a transaction POS->>GW: 1. Create instruction GW->>PA: 2. Send instruction to the Payroc app PA-->>GW: 3. Confirm delivery of instruction GW-->>POS: 4. Confirm that the Payroc app accepted the instruction Note over POS: 5. Switch to the Payroc app end rect rgba(0, 224, 184, 0.3) Note over POS,PA: Run the transaction Note over PA: 1. Payroc app captures the card information PA->>GW: 2. Send transaction details Note over GW: 3. Gateway sends transaction details to the processor Note over GW: 4. Processor returns a response for the transaction GW-->>PA: 5. Send transaction response end rect rgba(0, 81, 194, 0.4) Note over POS,PA: Get a link to the transaction POS->>GW: 1. Get the status of the instruction GW-->>POS: 2. Return instruction with a link to the transaction end rect rgba(0, 224, 184, 0.3) Note over POS,PA: View the transaction POS->>GW: 1. View details of the transaction GW-->>POS: 2. Return details of the transaction Note over POS: 3. Switch to POS app Note over POS: 4. Display the receipt end Initiate a transaction Your POS App sends an instruction to our gateway. Our gateway passes the instruction to the Payroc App. The Payroc App confirms that it has received the instruction. Our gateway sends a response to your POS app that contains",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/device-setup/idtech",
      "type": "guide",
      "title": "ID TECH",
      "description": "Connect an ID TECH card reader to your POS through the Payroc Cloud middleware, choosing the setup guide for your Windows or Linux host machine.",
      "headings": [
        "How it works",
        "Integration steps"
      ],
      "plainText": "You can use Payroc Cloud to send instructions from your POS to an ID TECH payment device that doesn't use an Android operating system. Your POS manages the checkout experience, while your ID TECH device captures the payment details. To enable communication between your POS, your payment device, and our gateway, you need to download the Payroc Cloud middleware. The middleware runs on a host machine with a Windows or Linux operating system, and it connects to only one payment device at a time by USB. How it works sequenceDiagram participant POS as POS participant GW as Gateway participant MW as Middleware participant D as Device rect rgba(0, 81, 194, 0.4) Note over POS,D: Initiate a transaction POS->>GW: 1. Create instruction GW->>MW: 2. Send instruction to middleware MW->>D: 3. Start payment on device MW-->>GW: 4. Confirm delivery of instruction GW-->>POS: 5. Return identifier for the instruction end rect rgba(0, 224, 184, 0.3) Note over POS,D: Run the transaction Note over D: 1. Device captures the transaction details D->>MW: 2. Send transaction details MW->>GW: 3. Send transaction details Note over GW: 4. Gateway sends transaction details to the processor Note over GW: 5. Processor returns a response for the transaction GW-->>MW: 6. Send transaction response MW-->>D: 7. Send transaction response end rect rgba(0, 81, 194, 0.4) Note over POS,D: Get a link to the transaction POS->>GW: 1. Get the status of the instruction GW-->>POS: 2. Return instruction with a link to the transaction end rect rgba(0, 224, 184, 0.3) Note over POS,D: View the transaction POS->>GW: 1. View details of the transaction GW-->>POS: 2. Return details of the transaction end Initiate a transaction Your POS sends an instruction to our gateway. Our gateway sends the instruction to the middleware. The middleware starts the payment on your payment device. The middleware confirms it received the instruction by sending a response to our gateway. Our gateway returns an identifier to your POS for the pa",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/device-setup/idtech-linux",
      "type": "guide",
      "title": "ID TECH - Linux",
      "description": "Set up the Payroc Cloud middleware on a Linux host machine so it can connect to your ID TECH card reader and communicate with our gateway.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Prepare your host machine for configuration",
        "Step 2. Configure native libraries",
        "Step 3. Configure the payconfig.xml file",
        "Step 4. Run the middleware",
        "Next steps"
      ],
      "plainText": "In this configuration, your ID TECH device communicates with your Linux host machine through the Payroc Cloud middleware. To ensure your POS can communicate with the ID TECH device, you need to configure your Linux host machine. Integration steps Prepare your host machine for configuration. Configure the native libraries. Configure the payconfig.xml file. Run the middleware. Before you begin Your host machine must have Java 8 or later installed. Step 1. Prepare your host machine for configuration To download the Payroc Cloud middleware and connect your payment device to your host machine, complete the following steps: Connect your payment device to a USB port on your host machine. Go to our Github repository, and then download Payroc Cloud middleware from the release files.If your host machine has Java 8 up to Java 16 installed, download version 1.6.76. If your host machine has Java 17 or later installed, download version 1.6.78+. Extract the files from the zipped folder. Step 2. Configure native libraries You need to copy the libraries that match your operating system into the middleware root folder so the middleware can load them when it starts. To do this, complete the following steps: Open the folder that you extracted the Payroc Cloud middleware to. Locate the folder that contains the library that you want to use, for example, to use 64-bit Linux with ID TECH, go to libs > idtech > linux-native-64. Copy the contents of the folder into the root folder. Create a new file in /etc/udev/rules.d and name the file usb.rules. Add the following contents to the file: SUBSYSTEM==\\\"usb\\\", ATTRS{idVendor}==\\\"0acd\\\", MODE=\\\"0666\\\". Create a new file in /etc/ld.so.conf.d and name the file idtech_libs.conf. In the idtech_libs.conf file, add the path to the ID TECH middleware package that contains the libraries for your Linux machine. Run the following command to load the libraries: $ sudo ldconfig. Step 3. Configure the payconfig.xml file The payconfig.xml file defines how the",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/device-setup/idtech-windows",
      "type": "guide",
      "title": "ID TECH - Windows",
      "description": "Set up the Payroc Cloud middleware on a Windows host machine so it can connect to your ID TECH card reader and communicate with our gateway.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Prepare your host machine for configuration",
        "Step 2. Configure native libraries",
        "Step 3. Configure the payconfig.xml file",
        "Step 4. Run the middleware",
        "Next steps"
      ],
      "plainText": "In this configuration, your ID TECH device communicates with your Windows host machine through the Payroc Cloud middleware. To ensure your POS can communicate with the ID TECH device, you need to configure your Windows host machine. Integration steps Prepare your host machine for configuration. Configure the native libraries. Configure the payconfig.xml file. Run the middleware. Before you begin Your host machine must have Java 8 or later installed. If you use a Windows 32-bit host machine, make sure you have installed 32-bit Java and configured its path. Step 1. Prepare your host machine for configuration To download the Payroc Cloud middleware and connect the payment device to the host machine, complete the following steps: Connect your payment device to a USB port on your host machine. Go to our Github repository and download Payroc Cloud middleware from the release files.If your host machine has Java 8 up to Java 16 installed, download version 1.6.76. If your host machine has Java 17 or later installed, download version 1.6.78+. Extract the files from the zipped folder. Step 2. Configure native libraries You need to copy the libraries that match your operating system into the middleware root folder so the middleware can load them when it starts. To do this, complete the following steps: Open the folder that you extracted the Payroc Cloud Middleware to. Locate the folder that contains the library that you want to use, for example, to use 64-bit Windows with ID TECH, go to libs > idtech > win-native-64. Copy the contents of the folder into the root folder. Step 3. Configure the payconfig.xml file The payconfig.xml file defines how the middleware communicates with the ID TECH device and our gateway, including: Which Payroc account and integration you are working with, for example, you send your API key to authenticate your requests. Which payment device the middleware is communicating with, for example, you send the value for the port that the ID TECH device is con",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/device-setup/ingenico",
      "type": "guide",
      "title": "Ingenico",
      "description": "Connect an Ingenico card reader to your POS through the Payroc Cloud middleware, choosing the setup guide for your Windows or Linux host machine.",
      "headings": [
        "How it works",
        "Integration steps"
      ],
      "plainText": "You can use Payroc Cloud to send instructions from a POS to an Ingenico payment device that doesn't use an Android operating system. Your POS manages the checkout experience, while your Ingenico device captures the payment details. To enable communication between your POS, your payment device, and our gateway, you need to download the Payroc Cloud middleware. The middleware runs on a host machine with a Windows or Linux operating system, and it connects to only one payment device at a time by USB. How it works The following diagram describes the flow of a transaction between your POS, the gateway, the middleware, and your payment device. sequenceDiagram participant POS as POS participant GW as Gateway participant MW as Middleware participant D as Device rect rgba(0, 81, 194, 0.4) Note over POS,D: Initiate a transaction POS->>GW: 1. Create instruction GW->>MW: 2. Send instruction to middleware MW->>D: 3. Start payment on device MW-->>GW: 4. Confirm delivery of instruction GW-->>POS: 5. Return identifier for the instruction end rect rgba(0, 224, 184, 0.3) Note over POS,D: Run the transaction Note over D: 1. Device captures the transaction details D->>MW: 2. Send transaction details MW->>GW: 3. Send transaction details Note over GW: 4. Gateway sends transaction details to the processor Note over GW: 5. Processor returns a response for the transaction GW-->>MW: 6. Send transaction response MW-->>D: 7. Send transaction response end rect rgba(0, 81, 194, 0.4) Note over POS,D: Get a link to the transaction POS->>GW: 1. Get the status of the instruction GW-->>POS: 2. Return instruction with a link to the transaction end rect rgba(0, 224, 184, 0.3) Note over POS,D: View the transaction POS->>GW: 1. View details of the transaction GW-->>POS: 2. Return details of the transaction end Initiate a transaction Your POS sends an instruction to our gateway. Our gateway sends the instruction to the middleware. The middleware starts the payment on your payment device. The middleware co",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/device-setup/ingenico-linux",
      "type": "guide",
      "title": "Ingenico - Linux",
      "description": "Set up the Payroc Cloud middleware on a Linux host machine so it can connect to your Ingenico card reader and communicate with our gateway.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Prepare your host machine for configuration",
        "Step 2. Configure native libraries",
        "Step 3. Configure the payconfig.xml file",
        "Step 4. Run the middleware",
        "Next steps"
      ],
      "plainText": "In this configuration, your Ingenico device communicates with your Linux host machine through the Payroc Cloud middleware. To ensure your POS can communicate with your Ingenico device, you need to configure your Linux host machine. Integration steps Prepare your host machine for configuration. Configure the native libraries. Configure the payconfig.xml file. Run the middleware. Before you begin Your host machine must have Java 8 or later installed. Step 1. Prepare your host machine for configuration To download the Payroc Cloud middleware and connect your payment device to your host machine, complete the following steps: Connect your payment device to a USB port on your host machine. Go to our Github repository, and then download Payroc Cloud middleware from the release files.If your host machine has Java 8 up to Java 16 installed, download version 1.6.76. If your host machine has Java 17 or later installed, download version 1.6.78+. Extract the files from the zipped folder. Step 2. Configure native libraries You need to copy the libraries that match your operating system into the middleware root folder so the middleware can load them when it starts. To do this, complete the following steps: Open the folder that you extracted the Payroc Cloud middleware to. Go to the folder that contains the library that you want to use, for example, to use 64-bit Linux with Ingenico, go to libs > ingenico > nativeLibsLinux > 64_bit. Copy the contents of the folder into the root folder. Create a new file in /etc/udev/rules.d and name it usb.rules. Add the following contents to the file: SUBSYSTEM==\\\"usb\\\", MODE=\\\"0666\\\". Step 3. Configure the payconfig.xml file The payconfig.xml file defines how the middleware communicates with your Ingenico device and our gateway, including: Which Payroc account and integration you are working with, for example, you send your API key to authenticate your requests. Which payment device the middleware is communicating with, for example, you send the ",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/device-setup/ingenico-windows",
      "type": "guide",
      "title": "Ingenico - Windows",
      "description": "Set up the Payroc Cloud middleware on a Windows host machine so it can connect to your Ingenico card reader and communicate with our gateway.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Prepare your host machine for configuration",
        "Step 2. Configure native libraries",
        "Step 3. Configure the payconfig.xml file",
        "Step 4. Run the middleware",
        "Next steps"
      ],
      "plainText": "In this configuration, your Ingenico device communicates with your Windows host machine through the Payroc Cloud middleware. To ensure your POS can communicate with your Ingenico device, you need to configure your Windows host machine. Integration steps Prepare your host machine for configuration. Configure the native libraries. Configure the payconfig.xml file. Run the middleware. Before you begin Your host machine must have Java 8 or later installed. If you use a Windows 32-bit host machine, make sure you have installed 32-bit Java and configured its path. Step 1. Prepare your host machine for configuration To download the Payroc Cloud middleware and connect your payment device to your host machine, complete the following steps: Connect your payment device to a USB port on your host machine. Go to our Github repository and download Payroc Cloud middleware from the release files.If your host machine has Java 8 up to Java 16 installed, download version 1.6.76. If your host machine has Java 17 or later installed, download version 1.6.78+. Extract the files from the zipped folder. Step 2. Configure native libraries You need to copy the libraries that match your operating system into the middleware root folder so the middleware can load them when it starts. To do this, complete the following steps: Open the folder that you extracted the Payroc Cloud middleware to. Go to the folder that contains the library that you want to use, for example, to use 64-bit Windows with Ingenico, go to libs > ingenico > nativeLibsWindows > 64bit. Copy the contents of the folder into the root folder. Step 3. Configure the payconfig.xml file The payconfig.xml file defines how the middleware communicates with your Ingenico device and our gateway, including: Which Payroc account and integration you are working with, for example, you send your API key to authenticate your requests. Which payment device the middleware is communicating with, for example, you send the value for the port that your",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/extend-your-integration",
      "type": "guide",
      "title": "Extend your solution",
      "description": "Extend your Payroc Cloud integration with signature capture, referenced and unreferenced refunds, and transaction reversal.",
      "headings": [],
      "plainText": "Prerequisites: Authentication An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). After you configure your payment device to run a sale, you can also extend your integration to include the following: Capture a signature - Capture a signature on a payment device. Run an unreferenced refund - Run a refund that isn't linked to a transaction. Run a referenced refund - Run a refund that is linked to a transaction. Reverse a transaction - Cancel a transaction in an open batch.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/run-sale",
      "type": "guide",
      "title": "Run a sale",
      "description": "Run a card sale on a Payroc Cloud device by submitting a payment instruction via POST to the Devices endpoint, polling for status, and retrieving the final payment result.",
      "headings": [
        "How it works",
        "Before you begin",
        "Step 1. Submit a payment instruction",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Response parameters",
        "Response (202)",
        "Step 2. View the status of a payment instruction",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 3. View the details of the payment",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "(Optional) Cancel a payment instruction",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Schema",
        "Response"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). After you configure a device for Payroc Cloud, program your POS to send a payment instruction to the payment device. Your POS then checks the status of the instruction until the payment finishes, and views the details of the payment. How it works sequenceDiagram participant POS as Your POS participant GW as Gateway participant D as Payment device rect rgba(0, 81, 194, 0.4) Note over POS,D: 1. Submit a payment instruction POS->>GW: POST /devices/{serialNumber}/payment-instructions GW->>D: Send the payment instruction GW-->>POS: paymentInstructionId, status = inProgress end rect rgba(0, 224, 184, 0.3) Note over POS,D: 2. Check the status of the payment instruction Note over D: Cardholder taps their card and<br />completes the payment on the device loop Until the status changes from inProgress POS->>GW: GET /payment-instructions/{paymentInstructionId} Note over GW: Waits up to a minute<br />for the status to change GW-->>POS: Current status<br />(when complete, includes a link to the payment) end end rect rgba(0, 224, 184, 0.3) Note over POS,GW: 3. View the details of the payment POS->>GW: GET /payments/{paymentId} GW-->>POS: Payment details (approved or declined) end opt Cancel while the status is inProgress POS->>GW: DELETE /payment-instructions/{paymentInstructionId} GW-->>POS: Payment instruction canceled end Your POS submits a payment instruction to the device. Our gateway sends the instruction to the device and returns a paymentInstructionId with a status of inProgress. The cardholder completes the payment on the device. Your POS checks the status of the payment instruction. Our gateway waits up to a minute for the status to change before it responds. If the status is still inProgress, your POS sends another request and keeps checking until the status changes. When the payment finishes, your POS uses the link in the response to view the details of the payment and to check whether ",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "deletePaymentInstruction",
          "getPayment",
          "getPaymentInstruction",
          "sendPaymentInstruction"
        ]
      }
    },
    {
      "route": "/guides/payments/payroc-cloud/run-unreferenced-refund",
      "type": "guide",
      "title": "Run unreferenced refunds",
      "description": "Submit an unreferenced refund instruction to a Payroc Cloud device by sending a POST request to the Devices endpoint, then poll for status and retrieve refund details.",
      "headings": [
        "Before you begin",
        "Step 1. Submit a refund instruction",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (202)",
        "Step 2. View the status of a refund instruction",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 3. View the details of the refund",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "(Optional) Cancel a refund instruction",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Schema",
        "Response"
      ],
      "plainText": "An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). After you configure a device for Payroc Cloud, program your POS to use the Submit Refund Instruction method to send a refund instruction to the payment device. To return funds to a cardholder, complete the following: Submit a refund instruction to the device. View the status of the refund instruction. View the details of the refund instruction. You can also cancel a refund instruction if it hasn’t yet completed. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. Submit a refund instruction To submit a refund instruction to a device, send a POST request to the Devices endpoint. Environment URL Test https://api.uat.payroc.com/v1/devices/{serialNumber}/refund-instructions Production https://api.payroc.com/v1/devices/{serialNumber}/refund-instructions Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /devices/{serialNumber}/refund-instructions Example request Request POST https://api.payroc.com/v1/devices/{serialNumber}/refund-instructions Refund instruction curl -X POST https://api.payroc.com/v1/devices/1850010868/refund-instructions \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"processingTerminalId\": \"1234001\", \"order\": { \"orderId\": \"OrderRef6543\", \"description\": \"Refund for order OrderRef6543\", \"amount\": 4999, \"currency\": \"USD\" }, \"operator\": \"Jane\", \"customizationOptions\": { \"entryMethod\": \"manualEntry\" } }' Refund instruction import requests url = \"https://api.payroc.com/v1/devices/1850010868/refund-instructions\" payload = { \"processingTerminalId\": \"1234001\", \"order\": { \"orderId\": \"OrderRef6543\", \"description\": \"Refund for order OrderRef6543\", \"amount\": 4999, \"currency\": \"USD\" }, \"operator\": \"Jane\", \"customizationOptions\": { \"entryMethod\": \"",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "deleteRefundInstruction",
          "getRefund",
          "getRefundInstruction",
          "sendRefundInstruction"
        ]
      }
    },
    {
      "route": "/guides/payments/refunds",
      "type": "guide",
      "title": "Refunds",
      "description": "Explains referenced refunds, unreferenced refunds, and reversals, and when to use each one to return funds to a customer",
      "headings": [
        "Refund types",
        "Referenced refund",
        "Example",
        "Unreferenced refund",
        "Example",
        "Reversal",
        "Guides",
        "Send a referenced refund to a bank account",
        "Reverse a bank transfer payment",
        "Send an unreferenced refund to a customer’s bank account",
        "Run a referenced refund for a card payment",
        "Run an unreferenced refund for a card payment",
        "Reverse a card sale or a pre-authorization"
      ],
      "plainText": "Prerequisites: Authentication When a customer returns an item or requests money back, the merchant can run a refund to return a payment to the customer’s account if it is in a closed batch or cancel the payment if it is in an open batch. Our gateway supports two types of refund: Referenced refund Unreferenced refund Refund types The refund type you use depends on whether you still have the original payment. If you do, the gateway's action depends on whether the payment is in an open or a closed batch. flowchart TD A([Customer requests a refund]):::blue B{Do you have the original payment,<br />with valid payment details?}:::yellow U([Unreferenced refund<br />Send the customer's new payment details]):::green R[Referenced refund<br />Send the refund with the original paymentId]:::neutral C{Is the payment in an open batch?}:::yellow CANCEL([Gateway cancels the payment.]):::green REFUND([Gateway returns the funds to the customer]):::green A --> B B -->|No, or the details have expired| U B -->|Yes| R R --> C C -->|Yes, open batch| CANCEL C -->|No, closed batch| REFUND classDef blue fill:#0051C2,stroke:#001D4E,color:#FFFFFF classDef green fill:#00E0B8,stroke:#001D4E,color:#001D4E classDef yellow fill:#F4F7FE,stroke:#0051C2,color:#0051C2,font-size:15px classDef neutral fill:#E5E5E5,stroke:#636363,color:#001D4E Referenced refund Our gateway uses the payment details from the original payment to return the payment to the customer. If the payment is in an open batch, the gateway automatically cancels the payment. If the payment is in a closed batch, the gateway refunds the payment. Example A customer returns an item to the merchant and wants a refund. The merchant uses their POS to look up the original sale and run a refund against the sale. Unreferenced refund If there is no previous payment or the customer payment details have expired, you need to provide our gateway with the customer’s new payment details so that we know where to send the funds to. Example A customer returns",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/refunds/referenced-refund-bank",
      "type": "guide",
      "title": "Send a referenced refund to a bank account",
      "description": "Refund a bank transfer payment by sending a POST request to the Bank Transfer Payments Refund endpoint using the original paymentId.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Headers",
        "Errors",
        "Step 1 - Retrieve the details of the payment",
        "1a (Optional) – Retrieve the details of the payment with a paymentId",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "1b (Optional) – Retrieve the details of the payment without a paymentId",
        "Request parameters",
        "Schema (request.query)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 2 - Refund the payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)"
      ],
      "plainText": "Prerequisites: Authentication A merchant can use the payment details of a card payment to run a referenced refund. To run a referenced refund, the merchant should first retrieve the payment information in one of the following ways: Use the paymentId. Search for the payment using payment information such as the bank account number. Integration steps Step 1. Retrieve information about the original payment. (Optional) Step 1a. Retrieve information about the payment using the paymentId. (Optional) Step 1b. Retrieve information about the payment without the paymentId. Step 2. Refund the payment. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Headers To create the header of each GET request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. curl -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" To create the header of each POST request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. Idempotency-Key: Include a UUID v4 to make the request idempotent. curl -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" -H \"Idempotency-Key: <UUID v4>\" Errors If your request is unsuccessful, we return an error. For more information about errors, see Errors. Step 1 - Retrieve the details of the payment 1a (Optional) – Retrieve the details of the payment with a paymentId Send a GET request with the paymentID to our Bank Transfer Payments endpoint. Environment URL Test https://api.uat.payroc.com/v1/bank-transfer-payments/{paymentId} Production https://api.payroc.com/v1/bank-transfer-payments/{paymentId} Request parameters To create the body of your request, use the following parameters: Schema (request.path) Path parameters for GET /bank-transfer-p",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "getBankTransferPayment",
          "listBankTransferPayments",
          "refundBankTransferPayment"
        ]
      }
    },
    {
      "route": "/guides/payments/refunds/referenced-refund-card",
      "type": "guide",
      "title": "Run a referenced refund for a card payment",
      "description": "Refund a card payment by sending a POST request to the Payments endpoint using the original paymentId, with optional GET requests to retrieve payment details first.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Retrieve information about the original payment",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 2. Refund the payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Test cases",
        "Refund a card payment"
      ],
      "plainText": "Prerequisites: Authentication · Run a card sale An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). A merchant can use the payment details of a card payment to run a referenced refund. To run a referenced refund, the merchant should first retrieve the payment information in one of the following ways: Use the paymentId. Search for the payment using payment information such as the card number. Note: If the merchant runs a refund on a payment that is in an open batch, our gateway automatically cancels the payment. Integration steps Step 1. Retrieve information about the original payment. (Optional) Step 1a. Retrieve information about the payment using the paymentId. (Optional) Step 1b. Retrieve information about the payment without the paymentId. Step 2. Refund the payment. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. Retrieve information about the original payment 1a – (Optional) Retrieve information with the paymentId Send a GET request with the paymentID to the Payments endpoint. Environment URL Test https://api.uat.payroc.com/v1/payments/{paymentId} Production https://api.payroc.com/v1/payments/{paymentId} Schema (request.path) Path parameters for GET /payments/{paymentId} Example request Request GET https://api.payroc.com/v1/payments/{paymentId} Payment curl https://api.payroc.com/v1/payments/M2MJOG6O2Y \\ -H \"Authorization: Bearer <token>\" Payment import requests url = \"https://api.payroc.com/v1/payments/M2MJOG6O2Y\" headers = {\"Authorization\": \"Bearer <token>\"} response = requests.get(url, headers=headers) print(response.json()) Payment const url = 'https://api.payroc.com/v1/payments/M2MJOG6O2Y'; const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } Payment package main import ( \"fmt\" \"net/http\" \"io\"",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "getPayment",
          "listPayments",
          "refundPayment"
        ]
      }
    },
    {
      "route": "/guides/payments/refunds/unreferenced-refund-bank",
      "type": "guide",
      "title": "Send an unreferenced refund to a customer’s bank account",
      "description": "Send an unreferenced refund to a customer's bank account by posting to the Bank Transfer Refunds endpoint without a paymentId.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Refund the payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)"
      ],
      "plainText": "Prerequisites: Authentication Note: Only certain merchant accounts can send unreferenced refunds. A merchant can refund a payment to a customer's bank account without a paymentId by running an unreferenced refund. Integration steps Step 1. Refund the payment. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. Refund the payment To refund a bank transfer payment, send a POST request to the Bank Transfer Refunds endpoint. Environment URL Test https://api.uat.payroc.com/v1/bank-transfer-refunds Production https://api.payroc.com/v1/bank-transfer-refunds Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /bank-transfer-refunds Example request Request POST https://api.payroc.com/v1/bank-transfer-refunds Bank Transfer Unreferenced Refund curl -X POST https://api.payroc.com/v1/bank-transfer-refunds \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"processingTerminalId\": \"1234001\", \"order\": { \"orderId\": \"OrderRef6543\", \"description\": \"Refund for order OrderRef6543\", \"amount\": 4999, \"currency\": \"USD\" }, \"refundMethod\": { \"type\": \"ach\", \"accountNumber\": \"1234567890\", \"nameOnAccount\": \"Sarah Hazel Hopper\", \"routingNumber\": \"123456789\", \"accountType\": \"checking\", \"secCode\": \"web\" }, \"customer\": { \"notificationLanguage\": \"en\", \"contactMethods\": [ { \"type\": \"email\", \"value\": \"sarah.hopper@example.com\" } ] }, \"customFields\": [ { \"name\": \"yourCustomField\", \"value\": \"abc123\" } ] }' Bank Transfer Unreferenced Refund import requests url = \"https://api.payroc.com/v1/bank-transfer-refunds\" payload = { \"processingTerminalId\": \"1234001\", \"order\": { \"orderId\": \"OrderRef6543\", \"description\": \"Refund for order OrderRef6543\", \"amount\": 4999, \"currency\": \"USD\" }, \"refundMethod\": { \"type\": \"ach\", \"accountNumber\": \"1234567890\", \"nameOnAccount\": \"Sarah Hazel Ho",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "bankTransferUnreferencedRefund"
        ]
      }
    },
    {
      "route": "/guides/payments/refunds/unreferenced-refund-card",
      "type": "guide",
      "title": "Run an unreferenced refund for a card payment",
      "description": "Run an unreferenced card refund by sending a POST request to the Refunds endpoint without a paymentId to return funds to a customer's card.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Refund the payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)"
      ],
      "plainText": "Prerequisites: Authentication A merchant can return a payment to a customer’s card without a paymentId by running an unreferenced refund. Integration steps Step 1. Refund the payment. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. Refund the payment To refund a card transfer payment, send a POST request to the Refund endpoint. Environment URL Test https://api.uat.payroc.com/v1/refunds Production https://api.payroc.com/v1/refunds Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /refunds Example request Request POST https://api.payroc.com/v1/refunds Refund curl -X POST https://api.payroc.com/v1/refunds \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"channel\": \"pos\", \"processingTerminalId\": \"1234001\", \"order\": { \"orderId\": \"OrderRef6543\", \"description\": \"Refund for order OrderRef6543\", \"amount\": 4999, \"currency\": \"USD\" }, \"refundMethod\": { \"type\": \"card\", \"cardDetails\": { \"entryMethod\": \"keyed\", \"keyedData\": { \"dataFormat\": \"plainText\", \"cardNumber\": \"4539858876047062\", \"device\": { \"model\": \"paxA920\", \"serialNumber\": \"1850010868\" }, \"expiryDate\": \"1230\" } } }, \"customFields\": [ { \"name\": \"yourCustomField\", \"value\": \"abc123\" } ] }' Refund import requests url = \"https://api.payroc.com/v1/refunds\" payload = { \"channel\": \"pos\", \"processingTerminalId\": \"1234001\", \"order\": { \"orderId\": \"OrderRef6543\", \"description\": \"Refund for order OrderRef6543\", \"amount\": 4999, \"currency\": \"USD\" }, \"refundMethod\": { \"type\": \"card\", \"cardDetails\": { \"entryMethod\": \"keyed\", \"keyedData\": { \"dataFormat\": \"plainText\", \"cardNumber\": \"4539858876047062\", \"device\": { \"model\": \"paxA920\", \"serialNumber\": \"1850010868\" }, \"expiryDate\": \"1230\" } } }, \"customFields\": [ { \"name\": \"yourCustomField\", \"value\": \"abc123\" } ] } headers = { \"Idempotency-Key\": \"8e0397",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "unreferencedRefund"
        ]
      }
    },
    {
      "route": "/guides/payments/refunds/void-bank",
      "type": "guide",
      "title": "Reverse a bank transfer payment",
      "description": "Reverse a bank transfer payment in an open batch by sending a POST request to the Bank Transfer Payments reverse endpoint with the paymentId.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Headers",
        "Errors",
        "Step 1. (Optional) List bank transfer payments",
        "Request parameters",
        "Schema (request.query)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 2. Reverse the bank transfer payment",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)"
      ],
      "plainText": "Prerequisites: Authentication If a customer requests a refund and the payment is still in an open batch, the merchant can use their POS to look up the bank transfer payment and cancel the transaction. To find the paymentId of the bank transfer payment that the merchant wants to reverse, they can retrieve a list of all the bank transfer payments that meet the search criteria that the merchant provides. They can then find the transaction that they want in the list of returned results. Note: If the merchant runs a referenced refund on a bank transfer payment that is in an open batch, our gateway automatically reverses the payment. Integration steps Step 1. (Optional) List bank transfer payments. Step 2. Reverse the bank transfer payment. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Headers To create the header of each GET request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. curl -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" To create the header of each POST request, you must include the following parameters: Content-Type: Include application/json as the value for this parameter. Authorization: Include your Bearer token in this parameter. Idempotency-Key: Include a UUID v4 to make the request idempotent. curl -H \"Content-Type: application/json\" -H \"Authorization: <Bearer token>\" -H \"Idempotency-Key: <UUID v4>\" Errors If your request is unsuccessful, we return an error. For more information about errors, see Errors. Step 1. (Optional) List bank transfer payments To retrieve a list of bank transfer payments, send a GET request to our Bank Transfer Payments endpoint. Use our filters to narrow down the search results. Environment URL Test https://api.uat.payroc.com/v1/bank-transfer-payments Production https://api.payroc.com/v1/bank-transfer-payments Request param",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "listBankTransferPayments",
          "reverseBankTransferPayment"
        ]
      }
    },
    {
      "route": "/guides/payments/refunds/void-card",
      "type": "guide",
      "title": "Reverse a card sale or a pre-authorization",
      "description": "Reverse a card sale or pre-authorization in an open batch by sending a POST request to the Reverse endpoint with the paymentId.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1 (Optional) List payments",
        "Request parameters",
        "Schema (request.query)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 2. Reverse a payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Test cases",
        "Reverse a card payment"
      ],
      "plainText": "Prerequisites: Authentication An AI skill is available for this guide, get it on the Skills Marketplace (GitHub). If a customer requests a refund and the payment is still in an open batch, the merchant can use their POS to look up the card payment and cancel the transaction. To find the paymentId of the card payment that the merchant wants to reverse, they can retrieve a list of all the card payments that meet the search criteria that the merchant provides. They can then find the transaction that they want in the list of returned results. Note: If the merchant runs a referenced refund on a bank transfer payment that is in an open batch, our gateway automatically reverses the payment. Integration steps Step 1. (Optional) List card payments. Step 2. Reverse a card payment. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1 (Optional) List payments To retrieve a list of card payments, send a GET request to our Payments endpoint. Use our filters to narrow down the search results. Environment URL Test https://api.uat.payroc.com/v1/payments Production https://api.payroc.com/v1/payments Request parameters To create the body of your request, use the following parameters: Schema (request.query) Query parameters for GET /payments Example request Request GET https://api.payroc.com/v1/payments Payment curl -G https://api.payroc.com/v1/payments \\ -H \"Authorization: Bearer <token>\" \\ -d after=8516 \\ -d before=2571 \\ --data-urlencode cardholderName=Sarah%20Hazel%20Hopper \\ --data-urlencode dateFrom=2024-07-01T15:30:00Z \\ --data-urlencode dateTo=2024-07-03T15:30:00Z \\ -d first6=453985 \\ -d last4=7062 \\ -d limit=25 \\ -d operator=Jane \\ -d orderId=OrderRef6543 \\ -d paymentLinkId=JZURRJBUPS \\ -d processingTerminalId=1234001 \\ -d settlementDate=2024-07-02 \\ -d settlementState=settled \\ -d status=accepted \\ -d status=ready \\ -d status=complete \\ -d tender=ebt \\ -d tipMode=noTip \\ -d tipMode=prompted \\ -d type=sale \\ -d type=pre",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "listPayments",
          "reversePayment"
        ]
      }
    },
    {
      "route": "/guides/payments/repeat-payments",
      "type": "guide",
      "title": "Repeat payments",
      "description": "Run recurring payments with your software or the gateway.",
      "headings": [],
      "plainText": "Run recurring payments with your software or the gateway. Use our gateway Use your own software",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/repeat-payments/using-our-gateway-for-recurring-billing",
      "type": "guide",
      "title": "Use our gateway",
      "description": "Set up recurring billing by creating a payment plan, saving a secure token, and assigning a customer to a subscription via POST requests to the Payment Plans, Secure Tokens, and Subscriptions endpoints.",
      "headings": [
        "How it works",
        "Integration steps",
        "Before you begin",
        "Step 1. Create a payment plan",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 2. Create a secure token",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 3. Create a subscription",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 4. (Optional) Manually collect a payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Test cases",
        "Create a payment plan",
        "Create a secure token",
        "Create a subscription for a payment plan",
        "Manually pay a subscription"
      ],
      "plainText": "Prerequisites: Authentication A merchant can use our gateway to take repeat payments automatically or manually from their customers. How it works sequenceDiagram actor C as Customer participant MS as Merchant's server participant GW as Gateway rect rgba(0, 81, 194, 0.4) Note over MS,GW: Step 1 — Create a payment plan MS->>GW: POST /payment-plans Note over MS,GW: name, currency, type, frequency,<br />length, recurringOrder.amount GW-->>MS: paymentPlanId Note right of MS: Store paymentPlanId end rect rgba(0, 224, 184, 0.3) Note over C,GW: Step 2 — Create a secure token C->>MS: Provide payment details MS->>GW: POST /secure-tokens GW-->>MS: secureToken Note right of MS: Store the secure token end rect rgba(0, 224, 184, 0.3) Note over MS,GW: Step 3 — Create a subscription MS->>GW: POST /subscriptions Note over MS,GW: paymentPlanId,<br />paymentMethod.secureToken.token,<br />startDate GW-->>MS: subscriptionId Note right of MS: Store subscriptionId end rect rgba(0, 224, 184, 0.3) Note over C,GW: Step 4 — Collect payments alt Automatic plan GW-->>C: Gateway collects on schedule else Manual plan MS->>GW: POST /subscriptions/{subscriptionId}/pay Note over MS,GW: order.orderId, order.amount GW-->>MS: Payment confirmed end end You create a payment plan with our API. Our gateway returns a paymentPlanId. You collect the customer's payment details and save them as a secure token. You create a subscription to assign the customer to the payment plan. In your request, send the paymentPlanId and the secure token. Our gateway collects payments automatically according to the plan schedule. If the payment plan uses manual collection, use the subscriptionId to collect each payment. A payment plan is a template that describes how the merchant takes payments from their customers, including the following information: Number of payments Length of the payment plan Amount for each payment How often payments are taken Initial costs Whether to automatically collect payments or manually collect pa",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "createPaymentPlan",
          "createSecureToken",
          "createSubscription",
          "paySubscription"
        ]
      }
    },
    {
      "route": "/guides/payments/repeat-payments/using-your-own-system-for-recurring-billing",
      "type": "guide",
      "title": "Use your own software",
      "description": "Set up recurring billing using your own software by creating secure tokens and sending POST requests to the Payments endpoint with standingInstructions to manage the payment cycle.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. (Optional) Create a secure token",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 2. Create a payment",
        "Create a card payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Create a bank transfer payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Test cases",
        "Run a card sale"
      ],
      "plainText": "Prerequisites: Authentication If you use your own software to manage repeat payments, program your software to run a sale each time the merchant wants to take a payment. Each request should also include the following information: Type of repeat payment Position of the payment in the billing cycle Information about the first payment You can also use our tokenization service to save the customer’s payment details as a secure token. For each repeat payment, you can use the secure token instead of the customer's payment details. Integration steps To use your own software for repeat payments, integrate with the following: Step 1. (Optional) Create a secure token. Step 2. Create a payment. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. (Optional) Create a secure token Note: If you have already set up your integration to create a secure token, go to Step 2. Create a payment. To save the customer’s payment details, send a POST request to our Secure Tokens endpoint. Environment URL Test https://api.uat.payroc.com/v1/processing-terminals/{processingTerminalId}/secure-tokens Production https://api.payroc.com/v1/processing-terminals/{processingTerminalId}/secure-tokens Note: We assign the secure token to the terminal that sent the request. Depending on the merchant’s account settings, other terminals within the merchant’s account can also use the secure token. Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /processing-terminals/{processingTerminalId}/secure-tokens Example request Request POST https://api.payroc.com/v1/processing-terminals/{processingTerminalId}/secure-tokens Secure Token curl -X POST https://api.payroc.com/v1/processing-terminals/1234001/secure-tokens \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"source\": { \"type",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "bankTransferPayment",
          "createSecureToken",
          "payment"
        ]
      }
    },
    {
      "route": "/guides/payments/represent-ach",
      "type": "guide",
      "title": "Re-present an ACH payment",
      "description": "Retrieve the reason a bank transfer payment failed and resubmit it by sending a GET and then a POST request to the Bank Transfer Payments endpoint",
      "headings": [
        "How it works",
        "Your integration journey",
        "Things to consider",
        "Errors",
        "Step 1. View the payment details",
        "Request parameters",
        "Schema (request.path)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 2. Re-present the payment",
        "Request parameters",
        "Schema (request.path)",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 3. (Optional) Re-present the payment again"
      ],
      "plainText": "Prerequisites: Authentication If an ACH payment has failed, we send an email to the merchant to let them know that the payment has failed. You can integrate with our API return the reason that the payment failed and then re-present the payment. Note: When the merchant views the reason why the payment failed, they might have to contact their customer to fix the issue before they can re-present the payment. How it works Each time you re-present a payment, you use a new paymentId from the returns object of the retrieved payment, not the paymentId you used to retrieve it. You can re-present a payment up to two times. sequenceDiagram participant M as Merchant participant GW as Gateway participant N as NACHA Note over M,N: An ACH payment has failed rect rgba(0, 81, 194, 0.4) Note over M,GW: Find out why the payment failed GW-->>M: Email: the ACH payment failed M->>GW: GET /bank-transfer-payments/:paymentId GW-->>M: returns[].paymentId and the failure reason Note over M: Contact the customer to<br />fix the issue, if needed end rect rgba(0, 224, 184, 0.3) Note over M,N: Re-present the payment M->>GW: POST /bank-transfer-payments/:paymentId/represent<br />using the new paymentId from returns GW->>N: Submit the re-presentment Note over M,N: If the payment fails again, repeat both steps with each new<br />paymentId from the returns object. You can re-present twice. end We email the merchant to let them know that an ACH payment has failed. Merchant uses their POS to view the details of the payment and the reason the payment has failed. Merchant contacts their customer to fix the issue. Merchant uses their POS to re-present the payment. Your integration journey View the payment details. Re-present the payment. (Optional) Re-present the payment again. Note: You can re-present a payment up to two times. Things to consider When you re-present a payment, don't use the same paymentId that you use to retrieve the payment. In the response of the Retrieve Payment method, our gateway se",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "getBankTransferPayment",
          "representBankTransferPayment"
        ]
      }
    },
    {
      "route": "/guides/payments/run-a-card-sale",
      "type": "guide",
      "title": "Run a card sale",
      "description": "Run a card sale by sending a POST request to the Payments endpoint with card details and amount to take funds from a customer's card.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Run a sale",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Test cases",
        "Run a card sale without a surcharge",
        "Run a card sale with a surcharge"
      ],
      "plainText": "Prerequisites: Authentication A merchant can use their POS to run card sales. Integration steps Run a sale. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Run a sale To run a sale, send a POST request to our Payments endpoint. Environment URL Test https://api.uat.payroc.com/v1/payments Production https://api.payroc.com/v1/payments Important: This method includes the following functions: Tokenization Pre-authorization Currency conversion Offline processing We don’t describe how to integrate with these functions in this guide. Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /payments Example request Request POST https://api.payroc.com/v1/payments Card Payment curl -X POST https://api.payroc.com/v1/payments \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"channel\": \"web\", \"processingTerminalId\": \"1234001\", \"order\": { \"orderId\": \"OrderRef6543\", \"amount\": 4999, \"currency\": \"USD\", \"description\": \"Large Pepperoni Pizza\" }, \"paymentMethod\": { \"type\": \"card\", \"cardDetails\": { \"entryMethod\": \"keyed\", \"keyedData\": { \"dataFormat\": \"plainText\", \"cardNumber\": \"4539858876047062\", \"device\": { \"model\": \"paxA80\", \"serialNumber\": \"WPC202833004712\" }, \"expiryDate\": \"1230\" } } }, \"operator\": \"Jane\", \"customer\": { \"firstName\": \"Sarah\", \"lastName\": \"Hopper\", \"billingAddress\": { \"address1\": \"1 Example Ave.\", \"city\": \"Chicago\", \"state\": \"Illinois\", \"country\": \"US\", \"postalCode\": \"60056\", \"address2\": \"Example Address Line 2\", \"address3\": \"Example Address Line 3\" }, \"shippingAddress\": { \"recipientName\": \"Sarah Hopper\", \"address\": { \"address1\": \"1 Example Ave.\", \"city\": \"Chicago\", \"state\": \"Illinois\", \"country\": \"US\", \"postalCode\": \"60056\", \"address2\": \"Example Address Line 2\", \"address3\": \"Example Address Line 3\" } } }, \"customFields\": [ { \"name\": \"yourCus",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "payment"
        ]
      }
    },
    {
      "route": "/guides/payments/run-a-pre-authorization",
      "type": "guide",
      "title": "Run a pre-authorization",
      "description": "Hold funds on a customer's card by sending a POST request to the Payments endpoint with autoCapture and processAsSale set to false, then optionally adjust and finally capture the pre-authorization.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Create a payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Step 2. (Optional) Adjust a payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 3. Capture a payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Test cases",
        "Run a pre-authorization",
        "Capture a pre-authorization"
      ],
      "plainText": "Prerequisites: Authentication A merchant can use pre-authorizations to hold an amount on a customer’s card to capture later. The merchant can run pre-authorizations only if we have enabled the function on their account. If a merchant needs to capture more than they originally pre-authorized, they can adjust the pre-authorization amount before they capture it. For example: A hotel pre-authorizes a one-night stay for a customer at $100. The customer decides to have dinner in the hotel for $50. The hotel adjusts the $100 pre-authorization to $150. At checkout, the hotel captures $150 from the customer’s account for the one-night stay and dinner. Integration steps Step 1. Create a payment. Step 2. (Optional) Adjust a payment. Step 3. Capture a payment. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. Create a payment To run a pre-authorization, send a POST request to our Payments endpoint. Environment URL Test https://api.uat.payroc.com/v1/payments Production https://api.payroc.com/v1/payments Request parameters To run a pre-authorization, set the value for the autoCapture and processAsSale parameters to false in the request body of a Create Payment request. Schema (request.body) Request body schema for POST /payments Example request Request POST https://api.payroc.com/v1/payments Create a pre-authorization curl -X POST https://api.payroc.com/v1/payments \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"channel\": \"web\", \"processingTerminalId\": \"1234001\", \"order\": { \"orderId\": \"OrderRef6543\", \"amount\": 9999, \"currency\": \"USD\", \"description\": \"Large Pepperoni Pizza\" }, \"paymentMethod\": { \"type\": \"card\", \"cardDetails\": { \"entryMethod\": \"keyed\", \"keyedData\": { \"dataFormat\": \"plainText\", \"cardNumber\": \"4539858876047062\", \"device\": { \"model\": \"paxA80\", \"serialNumber\": \"WPC202833004712\" }, \"expiryDate\": \"1230\" } } }, \"ope",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "adjustPayment",
          "capturePayment",
          "payment"
        ]
      }
    },
    {
      "route": "/guides/payments/run-sale-using-bank-details",
      "type": "guide",
      "title": "Run a sale with bank account details",
      "description": "Run a bank transfer payment by sending a POST request to the Bank Transfer Payments endpoint with ACH or PAD bank account details and amount.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Create a bank transfer payment",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)",
        "Test cases",
        "Run a sale with bank account details"
      ],
      "plainText": "Prerequisites: Authentication Our gateway supports the following bank transfer services: Automated Clearing House (ACH): A service that U.S. banks use to transfer funds between accounts. Pre-Authorized Debit (PAD): A service that Canadian banks use to transfer funds between accounts. Integration steps Create a bank transfer payment. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Create a bank transfer payment To create a bank transfer payment, send a POST request to our Bank Transfer Payments endpoint. Environment URL Test https://api.uat.payroc.com/v1/bank-transfer-payments Production https://api.payroc.com/v1/bank-transfer-payments Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /bank-transfer-payments Example request Request POST https://api.payroc.com/v1/bank-transfer-payments Store Token Bank Transfer Payment curl -X POST https://api.payroc.com/v1/bank-transfer-payments \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"processingTerminalId\": \"1234001\", \"order\": { \"amount\": 4999, \"currency\": \"USD\", \"orderId\": \"OrderRef6543\", \"breakdown\": { \"subtotal\": 4347, \"taxes\": [ { \"rate\": 5, \"name\": \"Sales Tax\", \"type\": \"rate\" } ], \"tip\": { \"type\": \"percentage\", \"percentage\": 10 } }, \"description\": \"Large Pepperoni Pizza\" }, \"paymentMethod\": { \"type\": \"ach\", \"accountNumber\": \"11101010\", \"nameOnAccount\": \"Sarah Hazel Hopper\", \"routingNumber\": \"053200983\", \"accountType\": \"checking\", \"secCode\": \"web\" }, \"customer\": { \"notificationLanguage\": \"en\", \"contactMethods\": [ { \"type\": \"email\", \"value\": \"joe@blogssoftware.com\" } ] }, \"credentialOnFile\": { \"tokenize\": true }, \"customFields\": [ { \"name\": \"yourCustomField\", \"value\": \"abc123\" } ] }' Store Token Bank Transfer Payment import requests url = \"https://api.payroc.com/v1/bank-transfer-payments\"",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "bankTransferPayment"
        ]
      }
    },
    {
      "route": "/guides/payments/save-payment-details",
      "type": "guide",
      "title": "Save payment details",
      "description": "Save a customer's payment details to the vault by sending a POST request to the secure-tokens endpoint, returning a secureTokenId for use in follow-on card or bank transfer transactions.",
      "headings": [
        "Before you begin",
        "Run a sale and save payment details",
        "Save payment details",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (201)"
      ],
      "plainText": "Prerequisites: Authentication Integrate with our API to create a secure token to represent a customer’s payment details. There are two ways to save the payment details in our vault and get a secure token: Save the payment details when running a sale. Save the payment details without running a sale. When you create your request, you can assign an ID to the secure token. If you don’t, our gateway assigns an ID to the secure token. We return the secureTokenID and the token in the response, which the merchant uses in follow-on transactions, including: Create a payment with card details or bank account details. Create a refund with card details or bank account details. Look up BIN information. Note: For more information about secure tokens, go to Tokenization. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Run a sale and save payment details To run a sale and save the payment details, send a Create a Payment request. In the request, include a credentialOnFile object and set the tokenize parameter to true. Our gateway runs the sale and saves the customer’s payment details in our vault. In the response, we return a secureTokenId and the token that the merchant can use for follow-on transactions. Note: For more information about how to run a sale, go to Run a card sale or Run a sale with bank account details. Save payment details To save a customer’s payment details without running a sale, send a POST request to: Environment URL Test https://api.uat.payroc.com/v1/processing-terminals/{processingTerminalId}/secure-tokens Production https://api.payroc.com/v1/processing-terminals/{processingTerminalId}/secure-tokens Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for POST /processing-terminals/{processingTerminalId}/secure-tokens Example request Request POST https://api.payroc.com/v1/processing-terminals/{processingTerminalId}/secure-tokens Se",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "bankTransferPayment",
          "binLookup",
          "createSecureToken",
          "payment",
          "refundBankTransferPayment",
          "refundPayment"
        ]
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone",
      "type": "guide",
      "title": "Tap to Pay on iPhone",
      "description": "Use our Tap to Pay on iPhone SDK to accept contactless card-present payments directly on an iPhone without an external card reader.",
      "headings": [
        "How it works",
        "Before you begin",
        "Supported devices and iOS versions",
        "Your integration journey",
        "Extend your integration"
      ],
      "plainText": "Prerequisites: Authentication Use our Tap to Pay on iPhone SDK to create an iOS app that accepts card-present payments directly on an iPhone. The SDK uses the iPhone's NFC reader and Apple's ProximityReader framework to securely read a customer's card details and send them directly to our gateway. Your app doesn't handle any sensitive card details. The SDK supports sales and referenced refunds, and accepts contactless credit and debit cards, Apple Pay, and other digital wallets that use NFC. How it works When a customer taps their card or device against the merchant's iPhone, our SDK communicates with the iPhone's contactless reader and our gateway to make the sale. sequenceDiagram participant YA as Your app participant SD as SDK participant IP as iPhone participant GW as Gateway rect rgba(0, 81, 194, 0.4) Note over YA,GW: Run a sale YA->>SD: 1. Initialize the SDK Note over YA: 2. Merchant starts a sale in your app YA->>SD: 3. Send the sale details SD->>IP: 4. Prompt the customer to tap their card IP-->>SD: 5. Return the card details SD->>GW: 6. Send the sale details and the card details GW-->>YA: 7. Return the sale response end Your app initializes the SDK. The merchant starts a sale in your app, for example, the merchant enters an amount and taps Charge. Your app calls the SDK with the sale details. The iPhone prompts the customer to tap their card. The iPhone reads the card and returns the card details to the SDK. The SDK sends the sale details and the card details to our gateway to run the sale. Our gateway authorizes the transaction and returns the sale response to your app. Before you begin Our guides use Xcode as your integrated development environment (IDE). If you work in a different IDE, your steps might differ. Make sure that you have the following: Your processing terminal ID. We send you the terminal ID when you sign up with us. Your integration API key. We send you the API key when you sign up with us. An Apple Developer account that is enrolled in the",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/add-a-line-item",
      "type": "guide",
      "title": "Add a line item",
      "description": "Add itemized product details to a Tap to Pay on iPhone sale using the CoreLineItem object, including a per-item tax.",
      "headings": [
        "Add a tax to a line item"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale To provide more information about a sale, you can add individual line items. Create a CoreLineItem object for each item, and assign the collection to the CoreSale object's lineItems array. The CoreLineItem object includes the following fields: Field Description commodityCode Commodity code of the item. productCode Product code of the item. itemDescription Description of the item. unitOfMeasure Unit of measure. A three-letter code used in international trade. For more information about the values that you can use, go to Units of measurement. unitPrice Price for each unit of measure before any taxes or discounts quantity Number of units. discountRate Discount percentage to apply to the item. taxes The list of taxes to apply to the item. For more information, go to Add a tax to a line item. Important: The SDK doesn't calculate the sale amount from the line items for you. Set sale.amount to the subtotal of all your line items. The subtotal is the unit price multiplied by the quantity, minus any discount. The following example adds a line item to a sale: Swift let item = CoreLineItem() item.commodityCode = \"AA\" item.productCode = \"BB\" item.itemDescription = \"Bread\" item.unitOfMeasure = EA item.unitPrice = 2.00 item.quantity = 2 item.discountRate = 0 item.taxes = [] let lineItems = NSMutableArray() lineItems.add(item) let sale = CoreSale() sale.amount = NSNumber(value: 4.00) sale.transactionInputMethod = TAP sale.lineItems = lineItems terminal.processSale(sale) Objective-C CoreLineItem *item = [[CoreLineItem alloc] init]; item.commodityCode = @\"AA\"; item.productCode = @\"BB\"; item.itemDescription = @\"Bread\"; item.unitOfMeasure = EA; item.unitPrice = @2.00; item.quantity = @2; item.discountRate = @0; item.taxes = [NSMutableArray array]; NSMutableArray *lineItems = [NSMutableArray array]; [lineItems addObject:item]; CoreSale *sale = [[CoreSale alloc] init]; sale.amount = @4.00; sale.transactionInputMethod = TAP; sale.lineItems = lin",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/add-a-tax",
      "type": "guide",
      "title": "Add a tax",
      "description": "Add a predefined tax or a custom tax to a Tap to Pay on iPhone sale using the CoreTax object.",
      "headings": [
        "Add a predefined tax",
        "Add a custom tax",
        "Add a custom tax by amount",
        "Add a custom tax by percentage"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale If you want to add a tax to a sale, you can add a tax that you've predefined in the terminal, or you can add a custom tax amount. Note: A sale can include only one tax at a time. If you assign a predefined tax, it replaces any other tax that you previously assigned to the sale, including a custom tax. Add a predefined tax You can use the SDK to add a tax that you've already set up in the terminal. Your predefined taxes are available in terminal.settings.taxListArray. Each entry is a CoreTax with a percentage, amount, and name already set. You don't need to carry out any calculations, our gateway automatically adds the tax amount for you. Note: taxListArray can be empty if there are no predefined taxes in your terminal. Check that a tax is available before you select one. To create a tax, go to Add a tax. In your app, let the merchant or the POS choose which tax to apply to the sale. The following code selects the first tax in the list: Swift if let taxes = terminal.settings.taxListArray, taxes.count > 0 { sale.tax = taxes[0] as? CoreTax } Objective-C NSMutableArray *taxes = [[WTPSTerminal singleton] getSettings].taxListArray; sale.tax = taxes.firstObject; The following example runs a complete sale with a predefined tax: Swift guard terminal.getDevice() != NODEVICE else { // The reader isn't connected. Prompt the merchant to connect before you continue. return } let sale = CoreSale() sale.amount = 42.00 sale.transactionInputMethod = TAP sale.orderId = \"YOUR_ORDER_REFERENCE\" if let taxes = terminal.settings.taxListArray, taxes.count > 0 { sale.tax = taxes[0] as? CoreTax } terminal.processSale(sale) Objective-C if ([[WTPSTerminal singleton] getDevice] == NODEVICE) { // The reader isn't connected. Prompt the merchant to connect before you continue. return; } CoreSale *sale = [[CoreSale alloc] init]; sale.amount = [NSNumber numberWithDouble:42.00]; sale.transactionInputMethod = TAP; sale.orderId = @\"YOUR_ORDER_REFERENCE\"; NSMuta",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/add-a-tip",
      "type": "guide",
      "title": "Add a tip",
      "description": "Add a predefined tip or a custom tip to a Tap to Pay on iPhone sale using the CoreTip object.",
      "headings": [
        "Add a predefined tip",
        "Add a custom tip"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale If you want to add a tip to a sale, you can add a tip that you've predefined in the terminal, or you can add a custom tip amount. Note: A sale can include only one tip at a time. If you assign a predefined tip, it replaces any tip amount that you previously set, including a custom tip amount. Add a predefined tip You can use the SDK to add a tip that you've already set up in the terminal. Your predefined tips are available in terminal.settings.tipListArray. Each entry is a CoreTip with a tipType of either PERCENTAGE or FIXED_AMOUNT. You don't need to carry out any calculations. Our gateway automatically adds the tip amount for you. Note: tipListArray can be empty if there are no predefined tips in your terminal. Check that a tip is available before you select one. To create a tip, go to Create a predefined tip on the Self-Care Portal. In your app, let the customer choose which tip to apply to the sale. The following code selects the first tip in the list: Swift if let tips = terminal.settings.tipListArray, tips.count > 0 { sale.tip = tips[0] as? CoreTip } Objective-C sale.tip = [[WTPSTerminal singleton] getSettings].tipListArray.firstObject; The following example runs a complete sale with a predefined tip: Swift guard terminal.getDevice() != NODEVICE else { return } let sale = CoreSale() sale.amount = 42.00 sale.transactionInputMethod = TAP sale.orderId = \"YOUR_ORDER_REFERENCE\" if let tips = terminal.settings.tipListArray, tips.count > 0 { sale.tip = tips[0] as? CoreTip } terminal.processSale(sale) Objective-C if ([[WTPSTerminal singleton] getDevice] == NODEVICE) { return; } CoreSale *sale = [[CoreSale alloc] init]; sale.amount = [NSNumber numberWithDouble:42.00]; sale.transactionInputMethod = TAP; sale.orderId = @\"YOUR_ORDER_REFERENCE\"; sale.tip = [[WTPSTerminal singleton] getSettings].tipListArray.firstObject; [[WTPSTerminal singleton] processSale:sale]; Add a custom tip You can use the SDK to add a custom tip that's spec",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/cancel-a-sale",
      "type": "guide",
      "title": "Cancel a sale",
      "description": "Cancel an in-progress sale with the Tap to Pay on iPhone SDK, and handle the cancellation status that the SDK returns.",
      "headings": [
        "Integration steps",
        "Step 1. Cancel the sale",
        "Step 2. Handle the cancellation status",
        "Find out why the SDK didn't cancel the sale"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale If a merchant starts a sale by mistake, or a customer changes their mind before they tap their card, you can cancel the sale while it's still in progress. To cancel a sale, call cancelTransaction on WTPSTerminal. You can't cancel a sale after our gateway starts to authorize the sale. To return funds after a sale, go to Run a refund. Integration steps Cancel the sale. Handle the cancellation status. Step 1. Cancel the sale Call cancelTransaction while the sale is in progress. Swift terminal.cancelTransaction() Objective-C [[WTPSTerminal singleton] cancelTransaction]; The SDK returns the outcome to onCancelTransactionAttempt:withError: on your CoreAPISaleListener. You registered this listener in Run a sale, so you don't need to register another listener. Step 2. Handle the cancellation status The SDK sends a TransactionCancellationStatus value to onCancelTransactionAttempt:withError:. The value indicates whether the SDK canceled the sale: Value Description TRANSACTION_CANCELLATION_STATUS_CANCELLING The SDK is canceling the transaction. Wait for the SDK to confirm the outcome. TRANSACTION_CANCELLATION_STATUS_CANCELLED The SDK canceled the transaction. TRANSACTION_CANCELLATION_STATUS_NOT_ALLOWED The SDK can't cancel the transaction, for example, because our gateway is authorizing the sale. TRANSACTION_CANCELLATION_STATUS_NOTHING_TO_CANCEL There was no transaction to cancel. Important: TRANSACTION_CANCELLATION_STATUS_CANCELLING means that the SDK accepted your request, not that it canceled the sale. Wait for TRANSACTION_CANCELLATION_STATUS_CANCELLED before your app tells the merchant that the SDK canceled the sale. The following example handles each cancellation status and enables or disables a payment button: Swift func onCancelTransactionAttempt(_ cancellationStatus: TransactionCancellationStatus, withError sdkError: CoreSdkErrorWrapper?) { switch cancellationStatus { case TRANSACTION_CANCELLATION_STATUS_CANCELLING: // The SDK",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/configure-the-processing-terminal",
      "type": "guide",
      "title": "Configure the processing terminal",
      "description": "Configure the Tap to Pay on iPhone terminal by initializing it locally, setting the operating mode, and loading your settings from our gateway.",
      "headings": [
        "Integration steps",
        "Step 1. Initialize WTPSTerminal",
        "Step 2. Load the settings from our gateway",
        "Next step"
      ],
      "plainText": "Prerequisites: Authentication · Set up the SDK Before your app can run a sale, it needs the merchant's payment settings. To get the payment settings, initialize WTPSTerminal in your app, and then send your terminal ID to our gateway. Integration steps Initialize WTPSTerminal. Load the settings from our gateway. Step 1. Initialize WTPSTerminal Add the following code to your app delegate or to wherever your app runs its launch code: Swift let terminal = WTPSTerminal<CoreTerminalConnector>.singleton() as! WTPSTerminal<CoreTerminalConnector> terminal.initialize() terminal.mode = TEST // TEST or LIVE terminal.setLogLevel(LEVEL_INFO) Objective-C [[WTPSTerminal singleton] initialize]; [(WTPSTerminal *)[WTPSTerminal singleton] setMode:TEST]; // TEST or LIVE [[WTPSTerminal singleton] setLogLevel:LEVEL_INFO]; Set the operating mode to one of the following values: Value Description TEST Sends requests to our test environment. Use TEST while you develop your integration. LIVE Sends requests to our production environment. Use LIVE when you're ready to run live transactions. Set the log level to one of the following values: Value Description LEVEL_FULL Records all messages, including raw data. Available only in TEST mode. LEVEL_INFO Records informational messages. LEVEL_ERROR Records only errors. LEVEL_NONE Records nothing. (Optional) To receive the SDK's log output in your own code, register a CoreAPILogsListener: Swift terminal.registerLogListener(self) func onLogMessage(_ message: String!, with logLevel: LogLevel) { print(\"[SDK \\(logLevel.rawValue)] \\(message ?? \"\")\") } Objective-C [[WTPSTerminal singleton] registerLogListener:self]; - (void)onLogMessage:(NSString *)message withLogLevel:(LogLevel)logLevel { NSLog(@\"[SDK %d] %@\", (int)logLevel, message); } Note: To stop receiving log messages, send nil to registerLogListener. Step 2. Load the settings from our gateway Important: Make sure that you register your settings listener before you call initWithConfiguration:. If you re",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/extend-your-integration",
      "type": "guide",
      "title": "Extend your integration",
      "description": "Extend your Tap to Pay on iPhone integration with refunds, transaction reporting, tips, taxes, line items, and surcharges.",
      "headings": [
        "Guides",
        "Run a refund",
        "Retrieve transactions",
        "Add a tip to a sale",
        "Add a tax to a sale",
        "Add a line item to a sale",
        "Handle surcharges",
        "Cancel a sale",
        "Run the sample apps"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale After you set up your app to run a sale, you can extend your integration to include the following: Run a refund - Return funds to the same card that the customer used for the original sale. Retrieve transactions - Retrieve a single transaction or list multiple transactions. Add a tip to a sale - Add a predefined tip or a custom tip to a sale. Add a tax to a sale - Add a predefined tax or a custom tax to a sale. Add a line item to a sale - Add itemized product details to a sale. Handle surcharges - Present a surcharge fee to the customer for confirmation. Cancel a sale - Cancel an in-progress sale, and handle the cancellation status that the SDK returns. Run the sample apps - Run the Swift or Objective-C sample app from the SDK package. Guides To extend your Tap to Pay on iPhone integration, follow our guides: Run a refund Refund a sale to the same card. Retrieve transactions View your sales and refunds. Add a tip to a sale Add a predefined or custom tip. Add a tax to a sale Add a predefined or custom tax. Add a line item to a sale Add itemized product details. Handle surcharges Present a surcharge for confirmation. Cancel a sale Cancel an in-progress sale. Run the sample apps Run our Swift or Objective-C sample app.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/handle-errors",
      "type": "guide",
      "title": "Handle errors",
      "description": "Handle transaction, communication, and device errors in your Tap to Pay on iPhone integration, and resolve a sale with an unknown outcome after a communication failure.",
      "headings": [
        "Transaction errors",
        "Communication errors",
        "Device errors"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale The SDK reports errors through different callbacks depending on the context. There are three main types of error that the SDK can return: Type Callback Listener Transaction errors onError:withDescription: CoreAPISaleListener Communication errors onTransactionCommError:withError:withMessage: CoreAPISaleListener Device errors onDeviceError:withDescription: CoreAPIDeviceListener Transaction errors The SDK returns transaction processing failures, such as network problems, to onError:withDescription: on CoreAPISaleListener. The CoreError enumeration identifies the type of failure. Swift func onError(_ error: CoreError, withDescription message: String!) { print(\"Sale error \\(error.rawValue): \\(message ?? \"\")\") } Objective-C - (void)onError:(CoreError)error withDescription:(NSString *)message { NSLog(@\"Sale error %d: %@\", (int)error, message); } Note: CoreAPIRefundListener uses the same parameters for refund errors. For the full list of CoreError values, go to the CoreError page in the SDK reference. Communication errors Important: If you receive a communication error, treat the sale as unresolved. If we authorized the sale, we recommend that you reverse the sale. A communication error happens when the device reads the card successfully but the transaction request doesn't reach our gateway. Because the customer has already tapped their card, you don't know the outcome on our gateway. The SDK returns communication errors to onTransactionCommError:withError:withMessage: on CoreAPISaleListener, and passes back the original CoreSale object. Note: Referenced refunds don't have a dedicated communication error callback. If a referenced refund fails to reach our gateway, the SDK reports it through onError:withDescription: on CoreAPIRefundListener instead. We recommend that you use the following recovery process for sales: Store the CoreSale object on the device. When the device is back online, use RestConnector.requestTransactionList to s",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/handle-surcharges",
      "type": "guide",
      "title": "Handle surcharges",
      "description": "Handle surcharges with Tap to Pay on iPhone by reading your terminal's surcharge settings, presenting the fee for confirmation, and letting the customer bypass it.",
      "headings": [
        "Integration steps",
        "Step 1. Read your surcharge settings",
        "Step 2. Run a sale",
        "Step 3. Confirm the surcharge",
        "Display the confirmation",
        "If the customer accepts",
        "If the customer declines",
        "Example",
        "Step 4. Handle reversal errors",
        "Step 5. (Optional) Change the confirmation timeout"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale A surcharge is an additional fee that we apply to card-present sales if surcharging is active on the terminal and if the card supports surcharging. When the SDK calculates a surcharge, it pauses the sale and asks your app to present the fee to the customer for confirmation. If a card is eligible for surcharging, the following flow describes what happens during a sale: Your app runs a sale. The customer taps their card. Our gateway authorizes the transaction and calculates the surcharge. Your app presents the fee to the customer:If the customer accepts, your app confirms that our gateway should apply the surcharge. Our gateway sends the sale for settlement. If the customer declines, your app notifies the SDK, which then automatically reverses the sale. If the confirmation timer expires, the SDK automatically reverses the sale. Integration steps Read your surcharge settings. Run a sale. Confirm the surcharge. Handle reversal errors (Optional) Change the confirmation timeout Step 1. Read your surcharge settings We configure surcharging on the terminal, so your app can't adjust the surcharge settings. Your app can only read the surcharge settings from CoreSettings.surchargeSettings in your onSettingsRetrieved: callback. CoreSurchargeSettings has the following properties: Property Type Description enable NSNumber* (bool) true when surcharging is active for the terminal. allowBypass NSNumber* (bool) true when customers can opt out of the surcharge before they tap. discloseFee NSNumber* (bool) true when you must disclose the fee to the customer. percentage NSNumber* The surcharge rate as a percentage of the sale amount. Important: Don't hard-code the surcharge settings. Always read CoreSettings.surchargeSettings at runtime. Step 2. Run a sale Create a sale request, and set bypassSurcharge to false or nil. Note: If you want to let the customer bypass the surcharge, set bypassSurcharge to true instead. The SDK then skips the confirm",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/retrieve-transactions",
      "type": "guide",
      "title": "Retrieve transactions",
      "description": "Retrieve a single transaction or list multiple transactions with the Tap to Pay on iPhone SDK using the reporting listener.",
      "headings": [
        "Retrieve a single transaction",
        "Step 1. Register the reporting listener",
        "Step 2. Retrieve the transaction",
        "List your transactions",
        "Step 1. Register the reporting listener",
        "Step 2. List transactions",
        "Step 3. Navigate through the results"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale You can use the SDK to view your transactions, which include sales and refunds. The steps that you follow depend on whether you want to retrieve a single transaction or list your transactions. We return all results to the CoreAPIReportingListener. Retrieve a single transaction Before you retrieve a single transaction, you need to have the uniqueRef of the transaction. If you don't have the uniqueRef, go to List your transactions. To retrieve a transaction, register the reporting listener, and then call getTransaction: with the uniqueRef. Step 1. Register the reporting listener Register CoreAPIReportingListener when your view appears, and unregister it when the view disappears. Swift // viewWillAppear: terminal.register(self as CoreAPIReportingListener) // viewWillDisappear: terminal.unRegister(self as CoreAPIReportingListener) Objective-C // viewWillAppear: [[WTPSTerminal singleton] registerCoreAPIReportingListener:self]; // viewWillDisappear: [[WTPSTerminal singleton] unRegisterCoreAPIReportingListener:self]; Step 2. Retrieve the transaction Call getTransaction: with a uniqueRef to get the full details of a transaction. Swift terminal.getTransaction(uniqueRef) Objective-C [[WTPSTerminal singleton] getTransaction:uniqueRef]; The SDK returns the transaction details to onTransactionRetrieved: as a CoreResponse. List your transactions If you want to view a list of your transactions, you can use the SDK to return multiple transactions. To handle large numbers of results, the SDK uses pagination to split the request into multiple pages. You can then navigate the pages to view all the transactions that the SDK returned. To list your transactions, register your reporting listener, and then call getTransactions: with optional filters. You can then navigate through the results. Step 1. Register the reporting listener Register CoreAPIReportingListener when your view appears, and unregister it when the view disappears. Swift // viewWi",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/run-a-refund",
      "type": "guide",
      "title": "Run a refund",
      "description": "Run a referenced refund with the Tap to Pay on iPhone SDK using the uniqueRef of the original sale.",
      "headings": [
        "Integration steps",
        "Step 1. Register the refund listener",
        "Step 2. Run the refund",
        "Refund errors"
      ],
      "plainText": "Prerequisites: Authentication · Run a sale Important: You can't run an unreferenced refund with the Tap to Pay on iPhone SDK. For more information about refund types, go to Refunds and reversals. A referenced refund returns funds to the same card that the customer used for the original sale. You don't need the customer to tap their card again. If you refund a sale that hasn't settled yet, our gateway reverses the sale instead. Before you begin, you need the uniqueRef of the sale that you want to refund. If you don't have it, go to Retrieve transactions. Integration steps Register the refund listener. Run the refund. Step 1. Register the refund listener The SDK returns refund results to onRefundResponse: on your CoreAPIRefundListener. To register your refund listener when your view appears, and unregister it when the view disappears, use the following code: Swift // viewWillAppear: terminal.register(self as CoreAPIRefundListener) // viewWillDisappear: terminal.unRegister(self as CoreAPIRefundListener) Objective-C // viewWillAppear: [[WTPSTerminal singleton] registerCoreAPIRefundListener:self]; // viewWillDisappear: [[WTPSTerminal singleton] unRegisterCoreAPIRefundListener:self]; Step 2. Run the refund To run a refund, create a CoreRefund, and then call processRefund:. CoreRefund includes the following properties: Property Description Required or optional uniqueRef Unique ID of the sale that you want to refund. Required reason Reason for the refund. Required amount Amount that you want to refund. Required orderId Your identifier for the order. Optional previousTxnDateTime The date and time of the original transaction. Optional autoCapture Whether to capture the refund automatically. The default value is true. Optional The following example refunds a sale: Swift let refund = CoreRefund() refund.uniqueRef = \"ORIGINAL_UNIQUE_REF\" refund.reason = \"Customer request\" refund.amount = 42.00 terminal.processRefund(refund) Objective-C CoreRefund *refund = [[CoreRefund alloc] in",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/run-a-sale",
      "type": "guide",
      "title": "Run a sale",
      "description": "Run a sale with Tap to Pay on iPhone by registering your listeners, initializing the contactless reader, and processing a CoreSale object.",
      "headings": [
        "Integration steps",
        "Step 1. Register your listeners",
        "Step 2. Initialize the device",
        "Accept the terms and conditions",
        "Step 3. Process the sale",
        "Time limit for the tap screen",
        "Messages during the sale",
        "Sale response",
        "Alternative payment methods",
        "Next steps"
      ],
      "plainText": "Prerequisites: Authentication · Set up the SDK · Configure the processing terminal Register your listeners, initialize the AppleTTP plugin on the device, and then create a CoreSale object. The SDK presents Apple's ProximityReader interface for you, so you don't need to build a card-capture screen. Integration steps Register your listeners. Initialize the device. Process the sale. Step 1. Register your listeners Register your listeners before you use them, and unregister them when your view controller disappears. If you don't unregister your listeners, your app can receive callbacks that are no longer relevant. Add the following code to register and unregister your listeners: Swift // viewWillAppear: terminal.register(self as CoreAPISaleListener) terminal.register(self as CoreAPIRefundListener) terminal.register(self as CoreAPIDeviceListener) terminal.register(self as CoreAPIMessageListener) // viewWillDisappear: terminal.unRegister(self as CoreAPISaleListener) terminal.unRegister(self as CoreAPIRefundListener) terminal.unRegister(self as CoreAPIDeviceListener) terminal.unRegister(self as CoreAPIMessageListener) Objective-C // viewWillAppear: [[WTPSTerminal singleton] registerCoreAPISaleListener:self]; [[WTPSTerminal singleton] registerCoreAPIRefundListener:self]; [[WTPSTerminal singleton] registerCoreAPIDeviceListener:self]; [[WTPSTerminal singleton] registerCoreAPIMessageListener:self]; // viewWillDisappear: [[WTPSTerminal singleton] unRegisterCoreAPISaleListener:self]; [[WTPSTerminal singleton] unRegisterCoreAPIRefundListener:self]; [[WTPSTerminal singleton] unRegisterCoreAPIDeviceListener:self]; [[WTPSTerminal singleton] unRegisterCoreAPIMessageListener:self]; Step 2. Initialize the device Important: Don't call initDevice before you receive the onSettingsRetrieved: callback. The SDK needs your settings before it can connect to the reader. For more information, go to Configure the processing terminal. Add the following code to initialize the reader with DCT_INTERN",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/run-the-sample-apps",
      "type": "guide",
      "title": "Run the sample apps",
      "description": "Run the Swift or Objective-C sample app from the Tap to Pay on iPhone SDK package by configuring signing, adding your API key, and setting your terminal ID.",
      "headings": [
        "Before you begin",
        "Integration steps",
        "Step 1. Open the project",
        "Step 2. Configure signing",
        "Step 3. Add your API key",
        "Step 4. Run the app"
      ],
      "plainText": "Prerequisites: Authentication · Set up the SDK We've created sample apps in Swift and Objective-C that you can use to see how our SDK works. Each sample app has the following tabs: Tab Description Sale Enter an amount and select Process to open the Tap to Pay reader. Hold a contactless card or an Apple Pay device near the iPhone to complete the transaction. Reporting Browse the transaction history for your terminal. Select a row to view the full details of a transaction. Settings Set the terminal ID. Your changes take effect after you select Save and reconnect. Before you begin Make sure that you've downloaded the Tap to Pay on iPhone SDK and extracted the contents. For more information, go to Download the SDK package. Make sure that you have the following: Xcode 15 or later. An iPhone XS or later that runs iOS 18 or later. An Apple Developer account that you've enrolled in the Apple Developer Program. An approved Tap to Pay on iPhone entitlement. Integration steps Open the project. Configure signing. Add your API key. Run the app. Step 1. Open the project From the Tap to Pay on iPhone SDK folder, go to the sample app folder in iosSample/. Open the .xcodeproj file in Xcode for the language that you want to use:Swift: iosSample/swiftSample/SwiftSample.xcodeproj Objective-C: iosSample/objectivecSample/CoreSDKExample.xcodeproj In the Project navigator, select the project file, and then select the app target. Step 2. Configure signing The package doesn't include signing configuration, so you must set your own team and bundle ID before you build. Important: The provisioning profile for your bundle identifier must include the Tap to Pay on iPhone entitlement, com.apple.developer.proximity-reader.payment.acceptance. Add the entitlement to your App ID in the Apple Developer portal, and then generate your provisioning profile again. In the target's Signing & Capabilities tab, complete the following steps: For Development Team, select your Apple Developer team. For Bundle Ide",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/tap-to-pay-on-iphone/set-up-the-sdk",
      "type": "guide",
      "title": "Set up the SDK",
      "description": "Add the Tap to Pay on iPhone SDK to your Xcode project, link the libraries, and configure your build settings.",
      "headings": [
        "Integration steps",
        "Step 1. Download the SDK package",
        "Step 2. Extract the archives",
        "Step 3. Link the libraries to your app",
        "Step 4. Copy the resources to your project",
        "Check that Xcode copied payconfig.xml into your app",
        "Step 5. Add your API key",
        "Step 6. (Optional) Create a Swift bridging header",
        "Step 7. Update your build settings",
        "Next step"
      ],
      "plainText": "Prerequisites: Authentication To set up the SDK and start integrating, add the Tap to Pay on iPhone SDK to your Xcode project, and then configure your build settings. Integration steps Download the SDK package. Extract the archives. Link the libraries to your app. Copy the resources to your project. Add your API key. (Optional) Create a Swift bridging header. Update your build settings. Step 1. Download the SDK package Go to our Tap to Pay on iPhone GitHub repository, and then from the Releases section, download the latest package. Step 2. Extract the archives Extract the contents from the PayrocTapToPayOniPhoneSDK zip folder. The package contains the following folders and files: Folder or file Description docs/ HTML documentation and a script to load the documentation on your computer. iosSample/ Sample apps that we've created using Swift and Objective-C. libs/ SDK and plugin static libraries. payconfig.xml Configuration file that contains the gateway URLs and your API key. Go to the libs folder, and then extract the following zip folders: gochip-applettp*.zip gochip-sdk*.zip Step 3. Link the libraries to your app In Xcode, open your project, and then select your project in the Project navigator. From the TARGETS list, select your app. Select the Build Phases tab. Expand Link Binary With Libraries, and then select +. Add each of the following libraries: libAFNetworking*.a libc++.tbd libgochip-common*.a libgochip-restconnector*.a libgochip-sdk*.a libgochip-applettp*.a libISO8601*.a libJSONModel*.a Step 4. Copy the resources to your project Copy the following files to the root of your app project: PayrocTapToPayOniPhoneSDK/libs/Core.h PayrocTapToPayOniPhoneSDK/payconfig.xml Check that Xcode copied payconfig.xml into your app If the payconfig.xml file isn't in Copy Bundle Resources, your app builds successfully but can't reach our gateway. To check that Xcode copied payconfig.xml into your app when it builds, complete the following steps: From the TARGETS list, select",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/three-d-secure",
      "type": "guide",
      "title": "3-D Secure",
      "description": "Explains how 3-D Secure verifies a cardholder's identity during online transactions and how it fits into your integration",
      "headings": [
        "How it works",
        "Guides",
        "Run a sale with 3-D Secure"
      ],
      "plainText": "Prerequisites: Authentication 3-D Secure is a security feature that helps to verify the cardholder’s identity during e-commerce transactions. Each time the merchant runs a transaction, the issuing bank assesses the transaction. If the risk of fraud is high, the issuing bank uses 3-D Secure to challenge the cardholder to verify their identity. How it works The following diagram shows how 3-D Secure works with your integration. sequenceDiagram participant YI as Your integration participant GW as Gateway participant MPI as MPI service participant IB as Issuing bank rect rgba(0, 81, 194, 0.4) Note over YI,GW: 1. Tokenize the payment details YI->>GW: Convert card details to a single-use token GW-->>YI: singleUseToken end rect rgba(0, 224, 184, 0.3) Note over YI,IB: 2. Run the 3-D Secure check YI->>MPI: GET /merchant/mpi<br />(processingTerminalId, singleUseToken, amount, currency, orderId, email) MPI->>IB: Send payment details for authentication Note over IB: Assess risk and, if needed,<br />challenge the cardholder IB-->>MPI: Authentication result MPI-->>YI: GET your MPI receipt URL<br />(result, mpiReference, status, eci) Note right of YI: We send the result in a separate<br />request to your MPI receipt URL end rect rgba(0, 224, 184, 0.3) Note over YI,GW: 3. Run the sale YI->>GW: POST /v1/payments<br />(threeDSecure.serviceProvider = gateway,<br />threeDSecure.mpiReference) GW-->>YI: Payment response end Your integration converts the cardholder's payment details into a single-use token. Your integration sends the single-use token and the transaction details to our merchant plug-in (MPI) service. The MPI service sends the details to the cardholder's issuing bank, which assesses the risk of fraud and, if needed, challenges the cardholder to verify their identity. We send the result and the MPI reference to your MPI receipt URL. Your integration sends a payment request with the MPI reference to our gateway. Our gateway returns the transaction result. Guides Run a sale wi",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/payments/three-d-secure/run-a-sale-with-3-d-secure",
      "type": "guide",
      "title": "Run a sale with 3-D Secure",
      "description": "Run a card sale with 3-D Secure authentication by sending an MPI request to verify the cardholder's identity, then submitting the MPI reference in a POST request to the Payments endpoint.",
      "headings": [
        "Integration steps",
        "Before you begin",
        "Step 1. Sign up for 3-D Secure",
        "Step 2. Convert the cardholder’s payment details into a single-use token",
        "Step 3. Send an MPI request",
        "Query parameters",
        "Example request",
        "Response fields",
        "Example response",
        "Step 4. Run a sale",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request"
      ],
      "plainText": "Prerequisites: Authentication Use our 3-D Secure feature to verify a cardholder’s identity during an e-Commerce transaction. Integration steps Step 1. Sign up for 3-D Secure. Step 2. Convert the cardholder’s payment details into a single-use token. Step 3. Send a merchant plug-in (MPI) request. Step 4. Include the MPI reference in a payment request. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Step 1. Sign up for 3-D Secure To sign up for 3-D Secure, contact our Customer Support team at cs@payroc.com. We use request forwarding to send you the results of the 3-D Secure check. When you sign up for 3-D Secure, provide a URL that we forward the requests to. Step 2. Convert the cardholder’s payment details into a single-use token Before you can send a request to our MPI service, you need to convert the cardholder’s payment details into a single-use token. To create a single-use token, you can use Hosted Fields or you can use our tokenization feature in our API. Step 3. Send an MPI request Send the single-use token to our MPI service with information about the transaction in the query parameters. Environment URL Test https://payments.uat.payroc.com/merchant/mpi Production https://payments.payroc.com/merchant/mpi Query parameters Parameter Type Required? Description processingTerminalId string Yes Unique identifier that we assigned to the terminal. singleUseToken string Yes Unique token that the gateway assigned to the payment details. email string Yes Cardholder’s email address. amount number <double> Yes Total amount of the transaction, which includes surcharges. The value is in the currency’s lowest denomination, for example, cents. currency string Yes ISO-4217 currency code of the transaction. orderId string Yes Unique identifier that the merchant assigns to the order. cardholderChallenge string No Indicates if the merchant wants the issuing bank to challenge the cardholder. Send one of the following values: • ",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "payment"
        ]
      }
    },
    {
      "route": "/guides/payments/update-saved-payment-details",
      "type": "guide",
      "title": "Update saved payment details",
      "description": "Update a customer's saved payment details by sending a PATCH request to the Update Secure Token endpoint or a POST request to the Update Account Details endpoint using a single-use token.",
      "headings": [
        "Before you begin",
        "Update saved payment details",
        "Integration steps",
        "Update a secure token",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Update saved payment details with a single-use token",
        "Integration steps",
        "Step 1. Update saved payment details with a single-use token",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)",
        "Step 2. (Optional) Update a secure token",
        "Request parameters",
        "Schema (request.body)",
        "Example request",
        "Request",
        "Response fields",
        "Schema (response.body)",
        "Example response",
        "Response (200)"
      ],
      "plainText": "Prerequisites: Authentication · Save payment details Integrate with our API to update a customer’s saved payment details. Our API has two endpoints to update payment details represented by a secure token: Update saved payment details – Use our Update Secure Token endpoint if you are sending the raw payment details, for example, if you are updating a card’s expiry date or a billing address. Update saved payment details with a single-use token – Use our Update Account Details endpoint if you have a single-use token that represents updated payment details, for example, if you have a single-use token from Hosted Fields. Note: To update saved payment details, you need the ID of the secure token that represents the payment details. If you don’t know the ID, go to List Secure Tokens. Before you begin Authenticate your requests before making API calls. If your request fails, see Errors. Update saved payment details Use the Update Secure Token method if you have the raw information that a customer wants to update. You can update the following payment details: Sensitive payment details, including:Card - Cardholder name and expiry date ACH - Accountholder name and account type PAD - Accountholder name and institution number MIT agreement Customer’s contact details Customer’s address details Integration steps Update a secure token Update a secure token To update the payment details represented by a secure token, send a PATCH request to our Update Secure Token endpoint. Environment URL Test https://api.uat.payroc.com/v1/processing-terminals/{processingTerminalId}/secure-tokens/{secureTokenId} Production https://api.payroc.com/v1/processing-terminals/{processingTerminalId}/secure-tokens/{secureTokenId} Note: The request format follows the RFC 6902 standard. Request parameters To create the body of your request, use the following parameters: Schema (request.body) Request body schema for PATCH /processing-terminals/{processingTerminalId}/secure-tokens/{secureTokenId} Example reques",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "accountUpdate",
          "updateSecureToken"
        ]
      }
    },
    {
      "route": "/guides/testing",
      "type": "guide",
      "title": "Testing",
      "description": "Send requests to the Payroc Cloud Simulator.",
      "headings": [],
      "plainText": "Send requests to the Payroc Cloud Simulator. Send test requests to our gateway Bank Payments Funding Payments Payroc Cloud",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/testing/bank-payments",
      "type": "guide",
      "title": "Bank Payments",
      "description": "Test values and return codes for validating bank payment integrations in the test environment.",
      "headings": [
        "Before you begin",
        "Test environment",
        "Authenticating your requests",
        "Example request",
        "Example response",
        "Example request header",
        "Test values",
        "Returns",
        "Re-presentments"
      ],
      "plainText": "Before you can run live bank payments, use our test environment to check that your integration works correctly. You can use our test environment to test the following transaction types: Sales Authorizations Reversals Unreferenced refunds In addition to testing different transaction types, you can trigger specific return codes and re-present payments. Note: If you have any issues when you run our test cases, email our integrations team at integrationsupport@payroc.com. Before you begin To help you with testing, we provide you with: Test environment Test values Returns Test environment Send your requests to our test environment: Test environment base URI: https://api.uat.payroc.com/v1 Important: Use only test bank account details in our test environment. Authenticating your requests Use our test Identity Service to generate a Bearer token to include in the header of your requests. To generate your Bearer token, complete the following steps: Include your API key in the x-api-key parameter in the header of a POST request. Send your request to https://identity.uat.payroc.com/authorize. Note: You need to generate a new Bearer token before the previous Bearer token expires. Example request curl --location --request POST 'https://identity.uat.payroc.com/authorize' --header 'x-api-key: <api key>' Example response If your request is successful, we return a response that contains your Bearer token, information about its scope, and when it expires. { \"access_token\": \"eyJhbGc....adQssw5c\", \"expires_in\": 3600, \"scope\": \"service_a service_b\", \"token_type\": \"Bearer\" } Example request header curl -H \"Authorization: Bearer <access token>\" Test values Use the following routing number and account number combinations to trigger specific results: Routing number Account number Result Description 053200983 11101010 Approved Successful transaction. 053200983 11101011 Declined Generic account-level decline. 053200983 11101012 Declined Routing number is incorrect. 053200983 11101013 Declined ",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "closeBankTransferPayment",
          "representBankTransferPayment"
        ]
      }
    },
    {
      "route": "/guides/testing/funding-instructions",
      "type": "guide",
      "title": "Funding",
      "description": "Test cases for verifying funding recipients, funding accounts, funding instructions, and funding activity integrations against the Payroc API.",
      "headings": [
        "Test environment",
        "Testing Funding Recipients",
        "Test 1: Create a Funding Recipient",
        "Request",
        "Response (201)",
        "Test 2: Add a Funding Account to a Recipient",
        "Request",
        "Response (201)",
        "Test 3: Add a new Owner to a Recipient",
        "Request",
        "Response (201)",
        "Test 4: Retrieve the Funding Accounts for a Recipient",
        "Request",
        "Response (200)",
        "Testing Funding Instructions",
        "Test 5: Create a new Funding Instruction",
        "Request",
        "Response (201)",
        "Test 6: Update a Funding Instruction",
        "Request",
        "Test 7: List Funding Activity",
        "Request",
        "Response (200)",
        "Results",
        "Need more help?"
      ],
      "plainText": "To check that you have correctly coded your integration to our API specifications, complete our test cases for each API resource. Each API resource has a unique test endpoint and a unique set of test cases. If your tests are successful: We send you an email to inform you that you can now send requests to the live endpoint. If your tests are unsuccessful: Contact the project owner or email us for help at integrationsupport@payroc.com. Test environment Run the following tests using our test environment with the credentials that we provided you. Test environment base URI: https://api.uat.payroc.com/v1 Testing Funding Recipients Use our /funding-recipients endpoint to create and manage third-party recipients that receive funds from your transactions. To verify that your integration works with this endpoint, run the following tests: Test 1: Create a Funding Recipient You can create a Funding Recipient independently of any existing MIDs on your account. Use our /funding-recipients endpoint to create a new Funding Recipient. Request POST https://api.payroc.com/v1/funding-recipients Create funding recipient curl -X POST https://api.payroc.com/v1/funding-recipients \\ -H \"Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324\" \\ -H \"Authorization: Bearer <token>\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"recipientType\": \"privateCorporation\", \"taxId\": \"12-3456789\", \"doingBusinessAs\": \"Pizza Doe\", \"address\": { \"address1\": \"1 Example Ave.\", \"address2\": \"Example Address Line 2\", \"address3\": \"Example Address Line 3\", \"city\": \"Chicago\", \"country\": \"US\", \"postalCode\": \"60056\", \"state\": \"Illinois\" }, \"contactMethods\": [ { \"type\": \"email\", \"value\": \"jane.doe@example.com\" }, { \"type\": \"phone\", \"value\": \"2025550164\" } ], \"owners\": [ { \"firstName\": \"Jane\", \"lastName\": \"Doe\", \"dateOfBirth\": \"1964-03-22\", \"address\": { \"address1\": \"1 Example Ave.\", \"city\": \"Chicago\", \"state\": \"Illinois\", \"country\": \"US\", \"postalCode\": \"60056\" }, \"identifiers\": [ { \"type\": \"nationalId\", \"value\": \"000-00-",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/testing/online-payments",
      "type": "guide",
      "title": "Payments",
      "description": "Test cases and test data for validating online payment integrations including card payments, secure tokens, payment plans, and bank transfers in the test environment.",
      "headings": [
        "Before you begin",
        "Test environment",
        "Authenticating your requests",
        "Example request",
        "Example response",
        "Example request header",
        "Test cards",
        "EBT test cards",
        "Test values",
        "Testing recommendations",
        "Test cases",
        "Card payments",
        "Run a card sale without a surcharge",
        "Run a card sale with a surcharge",
        "Run a pre-authorization",
        "Capture a pre-authorization",
        "Adjust a card payment",
        "Secure tokens",
        "Create a secure token",
        "Create a payment with a secure token",
        "Delete a secure token",
        "Update a secure token",
        "Payment plans and subscriptions",
        "Create a payment plan",
        "Update a payment plan",
        "Create a subscription for a payment plan",
        "Manually pay a subscription",
        "Update a subscription",
        "Deactivate a subscription",
        "Re-activate a subscription",
        "Bank transfers",
        "Run a sale with bank account details"
      ],
      "plainText": "Before you can run live payments, we require you to run our test cases to make sure that you have correctly integrated against our API. Note: If you have any issues when you run our test cases, email our integrations team at integrationsupport@payroc.com. Before you begin To help you with testing, we provide you with: Test environment Test cards Test values You should also review our testing recommendations. Test environment Send your requests to our test environment: Test environment base URI: https://api.uat.payroc.com/v1 Important: Use only test cards in our test environment. Authenticating your requests Use our test Identity Service to generate a Bearer token to include in the header of your requests. To generate your Bearer token, complete the following steps: Include your API key in the x-api-key parameter in the header of a POST request. Send your request to https://identity.uat.payroc.com/authorize. Note: You need to generate a new Bearer token before the previous Bearer token expires. Example request curl --location --request POST 'https://identity.uat.payroc.com/authorize' --header 'x-api-key: <api key>' Example response If your request is successful, we return a response that contains your Bearer token, information about its scope, and when it expires. { \"access_token\": \"eyJhbGc....adQssw5c\", \"expires_in\": 3600, \"scope\": \"service_a service_b\", \"token_type\": \"Bearer\" } Example request header curl -H \"Authorization: Bearer <access token>\" Test cards Note: Our gateway accepts any value for the CVV. Card scheme Card number Requires CVV? American Express 3400000000000000 Yes Debit MasterCard 5100270000000007 Yes Diners 3600000000000008 No Discover 6011000000000004 Yes JCB 3528000000000007 Yes Maestro 5000330000000000 Yes MasterCard 5001650000000000 Yes Visa Credit 4539858876047062 Yes Visa Debit 4000060000000006 Yes Visa Electron 4001020000000009 No EBT test cards Note: You can only test EBT transactions if the processor is Fiserv or TSYS. Card number Benefit ",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/testing/payroc-cloud",
      "type": "guide",
      "title": "Payroc Cloud",
      "description": "Test cases and test data for validating a Payroc Cloud physical POS integration before going live.",
      "headings": [
        "Before you begin",
        "Test environment",
        "Authenticating your requests",
        "Example request",
        "Example response",
        "Example request header",
        "Test cards",
        "Test values",
        "Testing recommendations",
        "Test cases",
        "Create a payment instruction using options that you configured in the gateway",
        "Step 1. Create a payment instruction",
        "Step 2. Retrieve the status of the payment instruction",
        "Step 3. Retrieve the status of the payment instruction",
        "Create a payment instruction that overrides the values that you configured in the gateway",
        "Step 1. Create a payment instruction",
        "Step 2. Retrieve the status of the payment instruction",
        "Step 3. Retrieve the status of the payment instruction",
        "Create a refund instruction for when the card isn’t present",
        "Step 1. Create a refund instruction",
        "Step 2. Retrieve the status of the refund instruction",
        "Step 3. Retrieve the status of the refund instruction"
      ],
      "plainText": "Before you can run live payments, we require you to run our test cases to make sure that you have correctly integrated against our API. Note: If you have any issues when you run our test cases, email our integrations team at integrationsupport@payroc.com. Before you begin To help you with testing, we provide you with: Test environment Test cards Test values You should also review our testing recommendations. Test environment Send your requests to our test environment: Test environment base URI: https://api.uat.payroc.com/v1 Important: Use only test cards in our test environment. Authenticating your requests Use our test Identity Service to generate a Bearer token to include in the header of your requests. To generate your Bearer token, complete the following steps: Include your API key in the x-api-key parameter in the header of a POST request. Send your request to https://identity.uat.payroc.com/authorize. Note: You need to generate a new Bearer token before the previous Bearer token expires. Example request curl --location --request POST 'https://identity.uat.payroc.com/authorize' --header 'x-api-key: <api key>' Example response If your request is successful, we return a response that contains your Bearer token, information about its scope, and when it expires. { \"access_token\": \"eyJhbGc....adQssw5c\", \"expires_in\": 3600, \"scope\": \"service_a service_b\", \"token_type\": \"Bearer\" } Example request header curl -H \"Authorization: Bearer <access token>\" Test cards Important: Use only test cards in our test environment. Card scheme Card number Verification Visa 4761 7300 0000 0011 Online only Mastercard 5413 3300 8960 4111 Online only Visa 4761 7310 0000 0043 Online or offline Mastercard 5413 3300 8960 4111 Online or offline Visa 4761 7310 0000 0043 Online or offline Mastercard 5413 3300 8960 4111 Online or offline Test values To return a specific response from the gateway, change the value in the amount parameter to end in one of the following values: Value Response Examp",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/guides/testing/send-test-requests-to-our-gateway",
      "type": "guide",
      "title": "Send test requests to our gateway",
      "description": "Step-by-step guide for using the Payroc Cloud Simulator to send test payment and refund requests to the gateway, including accessing the simulator and reviewing outcomes.",
      "headings": [
        "Before you begin",
        "Send test requests to our gateway",
        "Step 1. Access the simulator",
        "Step 2. Send a request",
        "Step 3. (Optional) Cancel the request"
      ],
      "plainText": "To test your integration, use the Payroc Cloud Simulator to send test requests to our gateway. Before you begin Before you use the Payroc Cloud Simulator, you need the following: Processing terminal ID - We sent you the processing terminal ID when you signed up with us. Payroc App API key - Use the Self-Care Portal to generate a Payroc App API key. For more information about how to generate a Payroc App API key, go to Generate a Payroc App API key. Send test requests to our gateway To send test requests to our gateway, complete the following steps: Access the simulator. Send a request. (Optional) Cancel the request. Step 1. Access the simulator Go to https://cloud.uat.payroc.com. Enter your processing terminal ID and your Payroc App API key. Select Save. Review the credentials that you entered. Select Copy S/N and Continue. You need to include the mock serial number in your requests to our gateway. Note: The simulator assigns a unique mock serial number to each browser tab, and each browser session expires after 15 minutes of inactivity. If you close the browser tab, you permanently delete all data from the session. Step 2. Send a request Choose one of the following methods: To run a sale, use our Submit Payment Instruction method. To run a refund, use our Submit Refund Instruction method. Configure and send your request. Note: For more information about test transaction amounts, go to Test transaction values. Review the outcome of the request: If the request is successful, your REST client and simulator will update. You can also view the instruction in the Self-Care Portal. If the request is unsuccessful, you can view the log file in the Payroc Cloud Simulator to investigate the error. To view the log file, complete the following steps:Select Simulator Details. Select Download log file. Payroc Cloud Simulator Log File Step 3. (Optional) Cancel the request Depending on the request you sent, choose one of the following methods:To cancel a sale, use our Cancel Payment",
      "refs": {
        "workflowIds": [
          "run-a-sale-on-a-device"
        ],
        "operationIds": [
          "deletePaymentInstruction",
          "deleteRefundInstruction",
          "sendPaymentInstruction",
          "sendRefundInstruction"
        ]
      }
    },
    {
      "route": "/knowledge",
      "type": "guide",
      "title": "Knowledge",
      "description": "Understand Payroc API behavior and payment concepts.",
      "headings": [
        "API basics",
        "Payments",
        "Payroc Cloud",
        "Testing",
        "Boarding",
        "Data migration",
        "Integration tools",
        "Events",
        "What our knowledge base contains"
      ],
      "plainText": "API basics Understand authentication, requests and API behavior. Browse articles → Payments Understand payment methods, processing and transaction behavior. Browse articles → Payroc Cloud Understand device integrations and signature capture. Browse articles → Testing Use the simulator and its test transaction values. Browse articles → Boarding Understand pricing before boarding merchants. Browse articles → Data migration Move payment data from another provider. Browse articles → Integration tools Find tools for building your integration. Browse articles → Events Understand event notifications and payloads. Browse articles → Welcome to our knowledge base. Our knowledge base includes articles that explain the features and functions of our API, as well as key concepts and terms that we use in our documentation. What our knowledge base contains Glossary of terms. Our glossary of terms provides short definitions of key terms that we use throughout our API. Articles that describe the features and functions of our API, and why we offer them to our merchants and partners. For example, what Pagination is and why we use it. Articles that provide more detailed explanations of key concepts. If you want help integrating with Payroc or using our API's key features, check out our Guides and our API Explorer. To test your integration, check out Test your integration.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/api-basics",
      "type": "guide",
      "title": "API basics",
      "description": "Understand authentication, requests and API behavior.",
      "headings": [],
      "plainText": "Understand authentication, requests and API behavior. Getting started with the Payroc API API keys Hypermedia as the engine of application state (HATEOAS) Glossary Units of measurement",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/api-basics/api-keys",
      "type": "guide",
      "title": "API keys",
      "description": "Explains the two types of API keys used to authenticate requests to the Payroc gateway — the standard API key for Bearer token generation and the Payroc App API key for terminal access.",
      "headings": [
        "API key",
        "Payroc App API key"
      ],
      "plainText": "An API key is a unique string of letters and numbers that we use to authenticate requests to our gateway. We use two types of API keys: API key Payroc App API key API key Use your API key with our identity service to generate a Bearer token, so that you can send requests to our API. We send you an API key when you sign up with us. For more information about Bearer token authentication, go to Authentication. Payroc App API key Use your Payroc App API key with the Payroc App and to access the Payroc Cloud Simulator. Each Payroc App API key is specific to a merchant account and its processing terminals. You can create and manage Payroc App API keys in the Self-Care Portal. For more information about Payroc App API keys, go to the following articles: Generate a Payroc App API key. View a Payroc App API key. Change the settings of a Payroc App API key. Deactivate a Payroc App API key. Reactivate a Payroc App API key.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/api-basics/getting-started",
      "type": "guide",
      "title": "Getting started with the Payroc API",
      "description": "Sandbox account, API keys, and your first authenticated request.",
      "headings": [
        "Getting started with the Payroc API"
      ],
      "plainText": "Getting started with the Payroc API Create a sandbox account at developers.payroc.com, generate an API key, and make your first request. Sandbox keys start sk_test_ and are shown once.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/api-basics/glossary",
      "type": "guide",
      "title": "Glossary",
      "description": "Definitions of payment industry terms, acronyms, and Payroc-specific concepts used across the developer documentation.",
      "headings": [
        "123",
        "A",
        "B",
        "C",
        "D",
        "E",
        "F",
        "G",
        "H",
        "I",
        "J",
        "K",
        "L",
        "M",
        "N",
        "O",
        "P",
        "Q",
        "R",
        "S",
        "T",
        "U",
        "V",
        "W",
        "X",
        "Y",
        "Z"
      ],
      "plainText": "123 Term Definition 3-D Secure Security protocol for online credit and debit transactions. A Term Definition Acquirer Merchant's bank that accepts funds from transactions. Also known as the acquiring bank. Acquirer Reference Number (ARN) Unique 23-digit number that the acquirer assigns to a Visa or Mastercard payment or refund. The acquirer uses the ARN to track the transaction as it transfers between the merchant and the cardholder. Address Verification Service (AVS) Service that checks whether the billing address associated with the transaction matches the billing address that the issuing bank has stored for the card. Financial institutions use this service to detect suspicious or fraudulent transactions. American Banker's Association (ABA) number For US checks, this is the unique identifier of the financial institution. Also known as the ABA routing number. We use the ABA routing number and the Demand Deposit Account (DDA) to identify individual bank accounts. API key Secret credential that authenticates your application when it calls our API. For example, a Payroc App API key authenticates with the Payroc App and the Payroc Cloud Simulator. For more information, see API keys. Apple Pay Payment service by Apple that cardholders use to pay with their Apple Wallet. Apple Pay session Session that we start with the Apple Pay JS API when we receive a successful request to our Apple Pay session endpoint. The session validates the merchant so they can run a sale with Apple Pay. Apple Wallet Type of digital wallet that Apple device users can use to store their payment cards. Application Programming Interface (API) Software that different computer programs use to communicate with each other. For example, Point of Sale (POS) devices communicate with our payment gateway using our API. Arbitration Final stage of the dispute process, where the card network reviews evidence from both sides and makes a final, binding decision. This happens after the cardholder's issuing bank ch",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/api-basics/hateoas",
      "type": "guide",
      "title": "Hypermedia as the engine of application state (HATEOAS)",
      "description": "Explains how the Payroc API uses HATEOAS links to surface related resources and paginate large result sets within API responses.",
      "headings": [
        "View additional information about a resource",
        "Example",
        "Navigate a list of records using pagination",
        "Example"
      ],
      "plainText": "We implement HATEOAS throughout our API to help you: View additional information about a resource. Navigate a list of records using pagination. View additional information about a resource If a resource has a relationship with other resources in our API, we provide HATEOAS links to the other resources in our response. Example If you retrieve the details of a payment, we include a links object that contains links to any referenced refunds or reversals that are related to the payment. The following example response contains links to two refunds related to the payment. \"links\": [ { \"rel\": \"refund\", \"method\": \"get\", \"href\": \"https://api.payroc.com/v1/refunds/CD3HN88U9F\" }, { \"rel\": \"refund\", \"method\": \"get\", \"href\": \"https://api.payroc.com/v1/refunds/FPU8P48WN8\" } ] Navigate a list of records using pagination If a GET request returns a large number of results, we send the results as a paginated list. To help you navigate through the results, we include HATEOAS links so that you can navigate through the results. Example The following example response contains a links object with HATEOAS links to the next page and previous page of a paginated list of payments. { \"links\": [ { \"rel\": \"next\", \"method\": \"get\", \"href\": \"<https://api.payroc.com/v1/payments?processingTerminalId=1001&limit=2&after=CW4BA4MUH0>\" }, { \"rel\": \"previous\", \"method\": \"get\", \"href\": \"<https://api.payroc.com/v1/payments?processingTerminalId=1001&limit=2&before=IFA1T74OBS>\" } ] }",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/api-basics/unit-of-measure",
      "type": "guide",
      "title": "Units of measurement",
      "description": "Reference list of unit of measurement codes supported by the Payroc API, covering weight, volume, length, time, energy, and quantity units.",
      "headings": [],
      "plainText": "We use the following units of measurement in our API: Code Unit of Measurement ACR Acre AMH Ampere-hour AMP Ampere ANN Year APZ Troy or apothecaries’ ounce. 12 troy ounces = 1 troy pound. ARE Are ASM Alcoholic strength mass ASV Alcoholic strength by volume ATM Standard atmosphere ATT Technical atmosphere BAR Bar BFT Board foot BHP Brake horsepower BHX Hundred boxes BIL Billion, E.U. Note: This is equivalent to trillion in the U.S. BLD Dry barrel BLL Barrel BQL Becquerel BTU British thermal unit BUA Bushel, U.S. BUI Bushel, U.K. BX Box CCT Carrying capacity in metric tonnes CDL Candela CEL Degrees Celsius CEN Hundred CGM Centigram CKG Coulomb per kilogram CLF Hundred leaves CLT Centiliter CMK Square centimeter CMT Centimeter CNP Hundred packs CNT Cental U.K. COU Coulomb CS Case CTM Metric carat CUR Curie CWA Hundredweight U.S. DAA Decare DAD Ten days DAY Day DEC Decade DLT Deciliter DMK Square decimeter DMQ Cubic decimeter DMT Decimeter DPC Dozen pieces DPT Displacement tonnage DRA Dram, U.S. DRI Dram, U.K. DRL Dozen rolls DRM Drachm DTH Hectokilogram DTN Centner or quintal, metric DWT Pennyweight DZN Dozen DZP Dozen packs DZR Dozen pairs EA Each EAC Each FAH Degrees Fahrenheit FAR Farad FOT Foot FTK Square foot FTQ Cubic foot GBQ Gigabecquerel GFI Gram of fissile isotopes GGR Great gross GIA Gill, U.S. GII Gill, U.K. GLD Dry gallon, U.S. GLI Gallon, U.K. GLL Liquid gallon, U.S. GRM Gram GRN Grain GRO Gross GRT Gross register tonnage GWH Gigawatt-hour HAR Hectare HBA Hectobar HGM Hectogram HIU Hundred international units HLT Hectoliter HMQ Million cubic meters HMT Hectometer HPA Hectoliter of pure alcohol HTZ Hertz HUR Hour INH Inch INK Square inch INQ Cubic inch ITM Item JOU Joule KBA Kilobar KEL Kelvin KGM Kilogram KGS Kilogram per second KHZ Kilohertz KJO Kilojoule KMH Kilometer per hour KMK Square kilometer KMQ Kilogram per cubic meter KMT Kilometer KNI Kilogram of nitrogen KNS Kilogram of named substance KNT Knot KPA Kilopascal KPH Kilogram of caustic potash, ki",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/boarding",
      "type": "guide",
      "title": "Boarding",
      "description": "Understand pricing before boarding merchants.",
      "headings": [],
      "plainText": "Understand pricing before boarding merchants. Pricing intents",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/boarding/pricing-intents",
      "type": "guide",
      "title": "Pricing intents",
      "description": "Explains how pricing intents work as fee templates that define base, gateway, and processor fees for merchants before boarding.",
      "headings": [],
      "plainText": "A pricing intent is a template that you use to set the fees that your merchants pay. Each pricing intent covers three categories of fees: Base fees - Fees for additional features, which include:Address verification service (AVS) Security add-ons Portal access Gateway fees - Fees for using our gateway, which include:Access fees Setup fees Tokenization fees Processor fees – Fees that cover the cost to process each transaction. These fees depend on the pricing program that the merchant signs up to, for example interchange plus or flat rate. Before you board a merchant, they must sign a merchant processing agreement (MPA) that describes the fees that the merchant has agreed to pay. Use the information from the MPA to populate the fees in the pricing intent. You can create a pricing intent for each merchant, or assign a merchant to a pricing intent that you have already created.",
      "refs": {
        "workflowIds": [
          "create-pricing-intent",
          "manage-pricing-intents"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/data-migration",
      "type": "guide",
      "title": "Data migration",
      "description": "Move payment data from another provider.",
      "headings": [],
      "plainText": "Move payment data from another provider. Migrate data from another payments provider Migrate payment data from another provider",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/data-migration/migrate-data",
      "type": "guide",
      "title": "Migrate data from another payments provider",
      "description": "Explains how to migrate tokenized card data and PANs from another payments provider to Payroc using PGP encryption.",
      "headings": [
        "Getting started",
        "How to use Pretty Good Privacy (PGP) to send us sensitive data",
        "Public key"
      ],
      "plainText": "Getting started To migrate your sensitive data to us from another payments provider, first send an email to data_migration_pgp@payroc.com with the following details: Partner contact detailsName Email address Phone number Doing-business-as (DBA) name Merchant contact detailsName Email address Phone number (Optional) Merchant ID Doing-business-as (DBA) name Name of the current processor Estimated number of tokens and PANs that you want to migrate How to use Pretty Good Privacy (PGP) to send us sensitive data Use our public key to encrypt your sensitive data. Send your encrypted data to us. When we receive your encrypted data, we use our private key to decrypt your data. Public key To encrypt your data with PGP software, for example GnuPG, use the following information: Key ID: 8BDA074099DF4828 Fingerprint: 3052 7B52 AAF3 0A36 CB90 9065 8BDA 0740 99DF 4828 User ID: Payroc data_migration_pgp@payroc.com Public key: -----BEGIN PGP PUBLIC KEY BLOCK----- mQINBGS6PQ0BEAC7aAyj1b6ZvSzVXEoHt7LXkAXiQlhGB94gG+8tzQeA4+3pqYSK cKN/HBqFTMPxWVZEYJuZFLLT4n2EpzIvwKesVjA4zzD/F1BnLN96WzjwXwOMYOTN 0KX2FG7fZAD4WG2YtHpaRPa5tRq3kKNlcvfzf1YYiszEr83LBUgFIy51wPExEkdK ew9ZSGHic1tJjTPjJl9I9uiPRF/pNlmWR+suy4sQ9Mocb7bSHjhdkGRwW0KghPxB b7tJNebbdw/oyzPgk/qDS4RkcqqjfA34kDuJVrS4bZsIZgGrbYr+7bdCYz7d6Cf4 qE1y5cuAZUYbl5o9+kVHZYBGk37KGRFHTGptN6dTRJOhjt6ozdt9I0fklbEKgtCS PjUrTXxKhejsqTxLBQ3FLMnk7sLz246xIh0fG2+X8fN6RNa6nuqV7JUWH7veLviZ 7priVGCjArMRHBIeEiqbBqIM83j4QFIxC0qT/maB9OOKegoaZ+tXEpeXFkuw+Qsm OEDXObr6F0f4RKMmUpTTcC2AGRufIwP9RSa1zbqasqWB0bZL7gtoNsWDzegknzmu fOf9XV4KrbtDJTA3WC/mC86wL5I9ep8is6hF0g7LdXgdvqCRqPDcs0+6oRdTWX0/ XGruzuCDk9ZNtBoQSQVacYb6xTOHLCER5HDseJWAvOK3y3UVqEV8v2tWwwARAQAB tCZQYXlyb2MgPGRhdGFfbWlncmF0aW9uX3BncEBwYXlyb2MuY29tPokCUQQTAQgA OxYhBDBSe1Kq8wo2y5CQZYvaB0CZ30goBQJkuj0NAhsPBQsJCAcCAiICBhUKCQgL AgQWAgMBAh4HAheAAAoJEIvaB0CZ30godIUQALr/vWRnV40EUmMPywakPTVQWGcQ XaUuwDB60ixjqbaQWXcOT6tvyxqeOH7pLghv0q9pEf9LaD7l6J/XKHA3figuKGIL VJuFWzyle/BsMy0Ub7cMveQdyZ65e6VvcJbUNSPzRKMSqDxDQo58kjLvLBaxpu4v",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/data-migration/token-import",
      "type": "guide",
      "title": "Migrate payment data from another provider",
      "description": "Explains how to migrate existing payment tokens from another provider to Payroc by contacting the Gateway Team, formatting a CSV file, encrypting it with PGP, and submitting it via SFTP.",
      "headings": [
        "Step 1. Contact us",
        "Step 2. Format the data",
        "Example",
        "Step 3. Encrypt the data",
        "Public key",
        "Step 4. Send us the file"
      ],
      "plainText": "To import data about tokens from another provider, you need to complete the following steps: Step 1. Contact us Step 2. Format the data Step 3. Encrypt the file Step 4. Send us the file Step 1. Contact us Before you import your data from another provider, email our Gateway Team with the following information: Current processing gateway Current processor Token direction (Import or Export) Approximate number of tokens Primary contact details:Name Email Phone Merchant DBA Merchant MID Merchant GWID After you contact our Gateway Team, we send you a global unique identifier (GUID) that you use when you name the file to allow us identify your import file. We also provide you with information about how to format the file. Step 2. Format the data We accept only CSV files for importing sensitive data. The name of the CSV file must include the GUID that we sent you and your terminal number that we assigned to you, for example, <GUID>_<terminal_number>.csv. In the CSV file, you must separate values with either semicolons (;) or colons (:), and use the headers in the following table: Field name Min length Max length Explanation Mandatory or Optional cardNumber 12 19 Unencrypted card number with without spaces. Mandatory cardHolderName 0 50 Cardholder name. Optional cardExpiry 4 6 Card expiry must be in one of the following formats: MMYY, YYMM, MMYYYY, or YYYYMM. All records must use the same format. Mandatory email 0 128 Cardholder's email address. Optional countryCode 0 2 Two-letter country code, for example, US, UK, or DE. Optional region 0 128 Customer data. Optional address 0 128 Customer data. Optional city 0 128 Customer data. Optional postCode 0 128 Customer data. Optional merchantref 1 200 Actual secure token. Mandatory transactionReference 0 128 Reference for the original transaction used to create this token. Optional Example The following example shows the layout of the CSV file with the headers. CSV Layout Step 3. Encrypt the data Note: If you’re unfamiliar with Pre",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/events",
      "type": "guide",
      "title": "Events list",
      "description": "Reference list of all subscribable API events, explaining the CloudEvents format used for webhook notifications.",
      "headings": [
        "CloudEvents attributes",
        "Example",
        "Events"
      ],
      "plainText": "We trigger an event when we make a change to a resource or complete a process, for example, when we change the status of a processing account. When you subscribe to an event, each time we trigger it we send you a notification to inform you about the change. We send the notification by a webhook request to an endpoint that you specify when you subscribe to the event. For more information about how to subscribe to events, go to Create an event subscription. Note: If we don't receive a 200 response to the webhook request, we retry the request up to five times. If the request is still unsuccessful after five retry attempts, we contact the support email address that you specified when you subscribed to the event. CloudEvents attributes We use the CloudEvents standard to format our event notifications. Each notification has the following attributes: Attribute Description specversion Version of the CloudEvents specification that the event notification follows. type Type of event that occurred. version Version of the event type in our specification. source Indicates the origin of the event. id Unique identifier of the event. time Time stamp of the event. datacontenttype Indicates the format of the data object. data Information about the change that triggered the event. Example { \"specversion\": \"1.0\", \"type\": \"processingAccount.status.changed\", \"version\": \"1.0.0\", \"source\": \"payroc\", \"id\": \"123e4567-e89b-12d3-a456-426614174000\", \"time\": \"2024-07-02T15:30:00.000Z\", \"datacontenttype\": \"application/json\", \"data\": { \"processingAccountId\": \"38765\", \"status\": \"entered\" } } Events You can subscribe to the following events with our API: Type Change Resource Version processingAccount.riskStatus.changed We have changed the risk status of a processing account. Boarding 1.0.0 processingAccount.signature.signed The Merchant Processing Agreement (MPA) for a processing account has been signed. Boarding 1.0.0 processingAccount.status.changed We have changed the status of a processing accoun",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/events/processingaccount-riskstatus-changed",
      "type": "guide",
      "title": "processingAccount.riskStatus.changed",
      "description": "processingAccount.riskStatus.changed: Event type: processingAccount.riskStatus.changed\\",
      "headings": [
        "Notification payload",
        "Example"
      ],
      "plainText": "Event type: processingAccount.riskStatus.changed Version: 1.0.0 Resource: Boarding We trigger this event when we change the risk status of a processing account. The risk status determines whether we hold or release funding for the account. Notification payload Attribute Description processingAccountId Unique identifier that we assigned to the processing account. riskStatus Risk status of the processing account. The status is one of the following values: • fullSuspense – We have suspended funding for the processing account. We hold all settlements until we complete our review. • nonFullSuspense – We have cleared the processing account for normal funding. Example { \"specversion\": \"1.0\", \"type\": \"processingAccount.riskStatus.changed\", \"version\": \"1.0.0\", \"source\": \"payroc\", \"id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\", \"time\": \"2024-09-15T10:45:00.000Z\", \"datacontenttype\": \"application/json\", \"data\": { \"processingAccountId\": \"38765\", \"riskStatus\": \"fullSuspense\" } }",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/events/processingaccount-signature-signed",
      "type": "guide",
      "title": "processingAccount.signature.signed",
      "description": "processingAccount.signature.signed: Event type: processingAccount.signature.signed\\",
      "headings": [
        "Notification payload",
        "Example"
      ],
      "plainText": "Event type: processingAccount.signature.signed Version: 1.0.0 Resource: Boarding We trigger this event when an owner or an authorized signatory signs the Merchant Processing Agreement (MPA) for a processing account. Notification payload Attribute Description processingAccountId Unique identifier that we assigned to the processing account. signed Indicates that an owner or an authorized signatory has signed the MPA. The value is true. Example { \"specversion\": \"1.0\", \"type\": \"processingAccount.signature.signed\", \"version\": \"1.0.0\", \"source\": \"payroc\", \"id\": \"123e4567-e89b-12d3-a456-426614174000\", \"time\": \"2026-05-21T11:30:00.000Z\", \"datacontenttype\": \"application/json\", \"data\": { \"processingAccountId\": \"38765\", \"signed\": \"true\" } }",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/events/processingaccount-status-changed",
      "type": "guide",
      "title": "processingAccount.status.changed",
      "description": "Explains the processingAccount.status.changed event, which fires when a processing account's status changes, and describes the notification payload and possible status values.",
      "headings": [
        "Notification payload",
        "Example"
      ],
      "plainText": "Event type: processingAccount.status.changed Version: 1.0.0 Resource: Boarding We trigger this event when we change the status of a processing account, for example, when we approve the account. Notification payload Attribute Description processingAccountId Unique identifier that we assigned to the processing account. status Status of the processing account. The status is one of the following values: • entered – We have received information about the account, but we have not yet reviewed it. • pending – We have reviewed the information about the account, but we have not yet approved it. • approved – We have approved the account for processing transactions and funding. • subjectTo – We have approved the account, but we require supporting documents. • dormant – Account is temporarily closed. • nonProcessing – We have approved the account, but the merchant has not yet run a transaction. • rejected – We rejected the application for the processing account. • terminated – Account is closed. • cancelled – Merchant withdrew the application for the processing account. Example { \"specversion\": \"1.0\", \"type\": \"processingAccount.status.changed\", \"version\": \"1.0.0\", \"source\": \"payroc\", \"id\": \"123e4567-e89b-12d3-a456-426614174000\", \"time\": \"2024-07-02T15:30:00.000Z\", \"datacontenttype\": \"application/json\", \"data\": { \"processingAccountId\": \"38765\", \"status\": \"entered\" } }",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/events/terminal-order-status-changed",
      "type": "guide",
      "title": "terminalOrder.status.changed",
      "description": "Explains the terminalOrder.status.changed webhook event, which fires when Payroc updates the status of a terminal order such as shipping or cancellation.",
      "headings": [
        "Notification payload",
        "Example"
      ],
      "plainText": "Event type: terminalOrder.status.changed Version: 1.0.0 Resource: Boarding We trigger this event when we change the status of a terminal order, for example, when we ship the items in the terminal order. If we ship items to the merchant as part of the terminal order, the final status is dispatched. We don’t trigger a status of fulfilled. Notification payload Attribute Description terminalOrderId Unique identifier that we assigned to the terminal order. processingAccountId Unique identifier that we assigned to the processing account. status Status of the terminal order. The status is one of the following values: • open – We are currently working on the terminal order. • dispatched – We have shipped the items in the terminal order. • fulfilled – We have completed the terminal order. • cancelled – We have canceled the terminal order. For more information about why we have canceled the order, see the reason parameter. • held – We have placed the terminal order is on hold. For more information about why we have held the order, see the reason parameter. reason If the status of the terminal order is cancelled or held, we provide a reason to explain why we have canceled or held the terminal order. Example { \"specversion\": \"1.0\", \"type\": \"terminalOrder.status.changed\", \"version\": \"1.0.0\" \"source\": \"payroc\", \"id\": \"c24a7423-9bed-403d-93eb-004dfadcc19b\", \"time\": \"2024-11-01T16:00:00.000Z\", \"datacontenttype\": \"application/json\", \"data\": { \"terminalOrderId\": \"1436\", \"processingAccountId\": \"12345678\", \"status\": \"held\", \"reason\": \"Pending MID Approval\", } }",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments",
      "type": "guide",
      "title": "Payments",
      "description": "Understand payment methods, processing and transaction behavior.",
      "headings": [],
      "plainText": "Understand payment methods, processing and transaction behavior. Credit card surcharging Tokenization Interchange fee Refunds and reversals Dynamic currency conversion Repeat payments Dynamic descriptors Payment plans and subscriptions Offline processing Payment method verification 3-D Secure Enhanced data",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments/currency-conversion",
      "type": "guide",
      "title": "Dynamic currency conversion",
      "description": "Explains how Dynamic Currency Conversion (DCC) lets cardholders pay in their home currency at point of sale, including eligibility requirements, regulations, and decision screen rules.",
      "headings": [
        "Important things to consider",
        "How does a payment with DCC work?",
        "Regulations",
        "Decision screen",
        "Receipt"
      ],
      "plainText": "Merchants can use the Dynamic currency conversion (DCC) service to give cardholders the option to pay in their own currency if the merchant’s currency is different. For example, a cardholder from the U.S. wants to purchase goods from a merchant in Ireland. The merchant can offer the cardholder two payment options with the DCC service: Pay in U.S. dollars: Use the exchange rate of the merchant's acquiring bank:The payment device displays the total amount of the payment, which includes the cost of the goods, the exchange rate, and mark-up percentage for the payment. Pay in Euros: Use the exchange rate of the cardholder’s bank:The payment device displays the cost of the goods, which does not include the exchange rate or potential fees from the cardholder’s bank. Important things to consider To offer DCC: The merchant must be based in the UK or Ireland. The merchant’s acquiring bank must be Elavon or AIBMS. The cardholder’s card must be Mastercard, VISA, or Diners Club International. How does a payment with DCC work? The cardholder presents their card to the payment device for payment. The payment device displays a decision screen to the cardholder. The cardholder chooses to pay in their own currency or the merchant's currency, and payment is taken from the cardholder’s account. The merchant prints a receipt for the payment that contains the details of the DCC offer. Note: If a card isn’t eligible for DCC, the payment device should run a standard payment without the DCC decision screen. Regulations If a merchant offers DCC to a cardholder, the cardholder must be fully aware of the details of the DCC offer. Therefore, the decision screen and receipts have specific regulations. Important: The decision screen and receipt must not include misleading text or use inappropriate layout or font sizes that may confuse the cardholder. Decision screen The decision screen must include the following information: Clear instruction to the cardholder to explain what they need to do, for",
      "refs": {
        "workflowIds": [
          "check-dcc-eligibility"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments/dynamic-descriptors",
      "type": "guide",
      "title": "Dynamic descriptors",
      "description": "Explains how dynamic descriptors let merchants customize the transaction text displayed on a customer's card statement to reduce chargebacks.",
      "headings": [
        "How we use dynamic descriptors"
      ],
      "plainText": "A dynamic descriptor is text that describes a transaction on a customer’s statement. A dynamic descriptor helps to reduce the risk of a chargeback because it helps the customer to identify the transaction. A dynamic descriptor can contain information about the transaction, for example: Order number Merchant's phone number Merchant's Doing Business As (DBA) name Note: A dynamic descriptor is also known as a billing descriptor. How we use dynamic descriptors We use hard dynamic descriptors to display the descriptor on the customer’s statement after the processor has settled the transaction. To create a dynamic descriptor, use our custom fields feature to create a custom field and assign it as a dynamic descriptor. For more information about how to create custom fields and dynamic descriptors, go to our Custom Fields guide.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments/enhanced-data",
      "type": "guide",
      "title": "Enhanced data",
      "description": "Explains how to add enhanced data to card payments and qualify for lower interchange rates.",
      "headings": [
        "Things to consider",
        "Level 2",
        "Example request",
        "Level 3",
        "Example request",
        "CEDP",
        "Example request",
        "Data quality best practices"
      ],
      "plainText": "To qualify for lower interchange rates in a business-to-business (B2B) or a business-to-government (B2G) card payment, merchants can add enhanced data to their payments. Enhanced data is additional information about a transaction beyond the amount and card details. Mastercard, Visa, and American Express offer programs that give merchants lower interchange rates based on the amount of enhanced data the merchant provides. Program Card brand Enhanced data Level 2 Mastercard and American Express Tax amount and purchase order (PO) number. American Express also requires some line-item details. Level 3 Mastercard Details about each item, shipping information, duty amount, tax amount, and PO number. Commercial Enhanced Data Program (CEDP) Visa Details about each item, shipping information, duty amount, tax amount, and PO number. Note: Card brands can update their requirements at any time. Even if you send all the required information, Payroc can't guarantee that the transaction qualifies for a program. Things to consider Your processing terminal must support enhanced data. Enhanced data applies only to commercial credit cards, for example, business cards and purchasing cards. Enhanced data isn't available for all merchant category codes (MCCs). Merchants must apply to American Express before they can qualify for Level 2. American Express supports up to 4 line-items for each transaction. Mastercard and Visa support up to 50 line-items for each transaction. TSYS and FDRC terminals support tax-exempt transactions. Level 2 To qualify for Level 2, you need to add the following information to your payment request: PO number Tax amount Subtotal Note: American Express also requires some line-item details, for example, a description and a price for each unit. The following table shows the API parameters you need to send in the Create Payment request to qualify for Level 2: Information API parameters PO number customer.referenceNumber Tax order.breakdown.taxes[].name order.breakdown.",
      "refs": {
        "workflowIds": [],
        "operationIds": [
          "payment"
        ]
      }
    },
    {
      "route": "/knowledge/payments/interchange",
      "type": "guide",
      "title": "Interchange fee",
      "description": "Explains how interchange fees are structured, what card brands charge for network use, and what factors determine which interchange category a transaction is assigned.",
      "headings": [
        "Target interchange category"
      ],
      "plainText": "The interchange fee is a non-negotiable fee set by card brands for the use of their networks. Payment processors like Payroc use the card brand’s networks to process credit transactions and debit transactions. The card brand assigns the transaction a target interchange category for each credit transaction and debit transaction. The rate of the interchange fee depends on which interchange category the card brand assigns to the transaction. The interchange fee is composed of: Set percentage (Basis Points): Fee of 1 hundredth of 1 percentage point, for the dollar-value of each individual transaction. Set transaction fee: Fee to pay for the cost of processing each individual transaction. Target interchange category Factors that influence what interchange category the card brand assigns to a transaction include: Card brand Card type Length of time to batch Method of transaction Mismatched authorization amount and settlement amount Missing or incomplete validation code SIC (Standard Industry Classification) for merchant type Size of transaction",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments/offline-processing",
      "type": "guide",
      "title": "Offline processing",
      "description": "Explains how offline processing allows terminals to accept card payments without a gateway connection and store them for later submission.",
      "headings": [
        "How it works",
        "Risks of offline processing"
      ],
      "plainText": "If offline processing is enabled on a terminal, the terminal can still accept payments when it can’t connect to the gateway, for example, if the terminal loses internet connection. When a merchant runs a payment and the terminal is offline, the terminal saves the payment details and information about the transaction. When the terminal connects to the gateway, it sends the payment details to the gateway to process the payment. Note: Offline processing should be used only temporarily as there are risks to the merchant. For more information about the risks, see risks of offline processing. How it works flowchart TD A([Run a payment]):::blue B[Customer presents their card]:::neutral C{Can the terminal connect to the gateway?}:::yellow D([Payment sent to the gateway for processing]):::green E{Is the terminal enabled for offline processing?}:::yellow F([Payment declined]):::red G[Terminal saves the payment details and transaction information]:::neutral H{Can the terminal connect to the gateway?}:::yellow I([Payment sent to the gateway for processing]):::green A --> B --> C C -->|Yes| D C -->|No| E E -->|No| F E -->|Yes| G --> H H -->|Yes| I H -->|No| G classDef blue fill:#0051C2,stroke:#001D4E,color:#FFFFFF classDef green fill:#00E0B8,stroke:#001D4E,color:#001D4E classDef yellow fill:#F4F7FE,stroke:#0051C2,color:#0051C2,font-size:15px classDef red fill:#DC2626,stroke:#991B1B,color:#FFFFFF classDef neutral fill:#E5E5E5,stroke:#636363,color:#001D4E Risks of offline processing If the terminal can’t connect to the gateway, the gateway can’t authorize the payment. There are many risks involved with accepting an unauthorized payment including: Customer could use a fraudulent card. Customer might not have the funds to pay. Customer could claim that they didn't authorize the payment and raise a chargeback. Important: The merchant is liable for funds that they can't capture from a cardholder's account and chargebacks arising from offline payments.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments/payment-method-verification",
      "type": "guide",
      "title": "Payment method verification",
      "description": "Explains the methods available for verifying a cardholder's identity during a transaction, including PIN, signature, AVS, CVV, and 3-D Secure.",
      "headings": [
        "PIN verification",
        "Signature verification",
        "AVS",
        "CVV",
        "3-D Secure"
      ],
      "plainText": "When running a transaction, we recommend that a merchant verifies the payment method to make sure that the person using the card is the genuine cardholder. There are several ways that a merchant can verify a payment method: PIN verification Signature verification Address Verification Service (AVS) Cardholder Verification Value (CVV) 3-D Secure PIN verification A terminal prompts a cardholder to enter their PIN if the card is: Chip and PIN Swipe and PIN Contactless and the card has reached the contactless CVM limit If the terminal is connected to our gateway, our gateway verifies the PIN with the card issuer. If the terminal is running transactions offline, the terminal verifies the PIN with the chip on the card. Signature verification A terminal prompts a cardholder to enter their PIN if the card is: Chip and PIN Swipe and PIN Contactless and the card has reached the contactless CVM limit If the terminal is connected to our gateway, our gateway verifies the PIN with the card issuer. If the terminal is running transactions offline, the terminal verifies the PIN with the chip on the card. Note: The major card brands such as VISA, Mastercard, and American Express don’t require a signature to complete a transaction. However, a merchant can require signatures for their own records. AVS During an e-Commerce transaction or a mail-order or telephone-order (MOTO) transaction, the merchant can ask the cardholder for their billing address. If the cardholder provides an address that matches the address that the cardholder has provided to their issuing bank, the transaction passes the AVS check. If the transaction does not pass the AVS check, the merchant can choose whether to accept or to decline the transaction. CVV During an e-Commerce transaction or a MOTO transaction, the merchant should request the CVV of the card. The CVV is a three-digit code or a four-digit code on the card. If the CVV is correct, the issuing bank approves the transaction. If the CVV is incorrect, the i",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments/payment-plans",
      "type": "guide",
      "title": "Payment plans and subscriptions",
      "description": "Explains how payment plans and subscriptions work together to enable merchants to take recurring and installment payments from customers.",
      "headings": [
        "Example"
      ],
      "plainText": "Merchants use payment plans and subscriptions to take repeat payments from their customers. A payment plan is a template that describes how a merchant takes payments from their customers. To add a customer to a payment plan and take repeat payments, the merchant uses a subscription. A subscription contains information about the customer and a secure token that represents the customer’s payment details. The merchant assigns the subscription to the payment plan to start taking payments. Each subscription inherits the details of the payment plan that the merchant assigns it to. However, the merchant can adjust each subscription to change the payments without affecting the payment plan that they assigned the subscription to. For example, a merchant can pause a subscription for the first month to offer a free trial period for a customer. Notes: Merchants can offer more than one payment plan. Each payment plan can have more than one subscription. Each subscription can contain the details of only one customer. Example A merchant offers two payment plans: a recurring plan, and an installment plan. The recurring plan has no fixed end date, and the installment plan has a fixed number of payments. Each payment plan has two customers subscribed to it. flowchart TD M[\"Merchant\"]:::neutral RP[\"Recurring plan\"]:::green IP[\"Installment plan\"]:::green C1[\"Customer 1 subscription\"]:::neutral C2[\"Customer 2 subscription\"]:::neutral C3[\"Customer 3 subscription\"]:::neutral C4[\"Customer 4 subscription\"]:::neutral M --> RP & IP RP --> C1 & C2 IP --> C3 & C4 classDef green fill:#00E0B8,stroke:#001D4E,color:#001D4E classDef neutral fill:#E5E5E5,stroke:#636363,color:#001D4E",
      "refs": {
        "workflowIds": [
          "set-up-repeat-payments",
          "manage-payment-plans",
          "manage-subscriptions"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments/refunds-and-reversals",
      "type": "guide",
      "title": "Refunds and reversals",
      "description": "Explains the difference between refunds and reversals for card payments, including referenced and unreferenced refund types and when each applies.",
      "headings": [
        "Refunds",
        "Referenced refund",
        "Unreferenced refund",
        "Reversals"
      ],
      "plainText": "Refunds and reversals are ways to return a payment to a customer. Whether you choose to refund a payment or to reverse a payment depends on if the payment is in a closed batch or an open batch: Closed batch - Refund Open batch - Reversal Refunds If the payment is in a closed batch, refund the payment to the customer. There are two types of refund: Referenced Unreferenced Referenced refund A referenced refund is a refund that the merchant links directly to a previous payment. The merchant refunds the amount of the referenced payment without the customer needing to provide their payment details again. For example, if a customer wants to return an item, the merchant can look up the payment on their POS and return the payment amount directly to the customer. Unreferenced refund Note: Only certain merchant accounts can run unreferenced refunds. An unreferenced refund is a refund the merchant does not link to a previous payment. The customer needs to provide a payment method to return the funds to, and the merchant needs to specify the amount to return to the customer. For example, if a customer wants to return an item but their card has expired, the merchant can return the payment amount to a different payment method. Reversals Note: A reversal is also known as a void. If the payment is in an open batch, reverse the payment to remove it from the batch. The reversal cancels the transaction before we process it. For example, a customer buys an item in a shop and returns the item before the merchant closes the batch. The merchant can run a reversal so that they don’t charge the customer.",
      "refs": {
        "workflowIds": [
          "refund-a-card-payment",
          "reverse-a-card-payment",
          "run-unreferenced-card-refund"
        ],
        "operationIds": [
          "refundPayment",
          "reversePayment",
          "unreferencedRefund"
        ]
      }
    },
    {
      "route": "/knowledge/payments/repeat-payments",
      "type": "guide",
      "title": "Repeat payments",
      "description": "Explains recurring payments and installment payments, and how to choose between your own software or our gateway to manage them",
      "headings": [
        "Set up repeat payments",
        "Guides",
        "Use your own software",
        "Use our gateway"
      ],
      "plainText": "Prerequisites: Authentication Repeat payments are payments that a merchant takes from a customer on a regular schedule. For example, a merchant may offer a monthly product such as a magazine subscription or a merchant may allow customers to split large payments into smaller regular payments. The two types of repeat payments that we support are: Recurring payment: A repeat payment that has no known end date. Examples of recurring payments include:A customer joins a merchant’s gym and the merchant takes $40 each month until the customer cancels their membership. A customer subscribes to a weekly magazine and the merchant takes $5 each week until the customer cancels their subscription. Installment payment: A single large transaction that a customer pays over a fixed period. Examples of installment payments include:A customer buys a television for $1200 and the merchant takes $100 each month for a year. A customer books a holiday that costs $2000 and the merchant takes $250 each month for eight months. Set up repeat payments To set up and manage repeat payments, you can either: Use your own software to manage payments, and our gateway to process them. OR Use our gateway to manage and process payments. Guides Use your own software Use your own software to take repeat payments. Use our gateway Create a payment plan to take repeat payments.",
      "refs": {
        "workflowIds": [
          "set-up-repeat-payments"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments/surcharging",
      "type": "guide",
      "title": "Credit card surcharging",
      "description": "Explains how credit card surcharging works, including how merchants add a fee to cover card processing costs and the rules governing surcharge rates and disclosure.",
      "headings": [
        "What you need to know about surcharging"
      ],
      "plainText": "When a customer pays with their credit card, a merchant can add a surcharge to the customer’s total price to cover the cost of the merchant’s card processing fees. Merchants must display the fee separately from the total price and offer the customer two different payment options. The customer can choose to accept the surcharge and pay with their credit card or choose to pay with cash without a surcharge. For example, if a merchant is eligible for surcharging and their customer chooses to pay with their credit card: Customer has a total cost for goods or services from the merchant’s store for $100. Merchant adds the three percent surcharge rate to the customer’s total cost. Merchant offers the customer two price options: a. $103 – Credit card payment b. $100 – Cash payment Customer chooses to pay with their credit card. Merchant receives a total payment of $103. What you need to know about surcharging Surcharges are: Added to the total price of goods or services at the point of sale. A maximum of three percent of the total purchase price. A non-taxable amount because it is added only to the retail price. Important: Check the surcharging requirements for each state and each card brand.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments/threedsecure",
      "type": "guide",
      "title": "3-D Secure",
      "description": "Explains how 3-D Secure authentication works to prevent e-commerce fraud by verifying cardholder identity with the issuing bank.",
      "headings": [
        "How 3-D Secure works"
      ],
      "plainText": "Issuing banks use 3-D Secure to help prevent fraud in e-commerce payments. When a merchant runs an e-commerce payment, they can send details about the payment to the 3-D Secure service. The 3-D Secure service then sends these details to the issuing bank to assess the risk of fraud for the payment. If the risk of fraud is too high, the issuing bank then asks the cardholder to verify their identity. For example, if a cardholder wants to buy an expensive item from an online store, the issuing bank prompts the cardholder to log in to their banking app to verify their identity. 3-D Secure is also known as: Visa Secure Verified by Visa Mastercard identity check Mastercard SecureCode American Express Safekey How 3-D Secure works flowchart TD A([Cardholder submits a payment on the merchant's checkout page]):::blue B[Merchant's POS sends the payment details to the 3-D Secure service]:::neutral C[The 3-D Secure service sends the payment details to the cardholder's issuing bank]:::neutral D[Issuing bank assesses the payment details for risk of fraud]:::neutral E{Is there a high risk of fraud?}:::yellow F([Issuing bank approves the payment]):::green G[Issuing bank prompts cardholder to verify their identity]:::neutral H{Does the cardholder verify their identity?}:::yellow I([Issuing bank declines the payment]):::red A --> B --> C --> D --> E E -->|No| F E -->|Yes| G --> H H -->|Yes| F H -->|No| I classDef blue fill:#0051C2,stroke:#001D4E,color:#FFFFFF classDef green fill:#00E0B8,stroke:#001D4E,color:#001D4E classDef yellow fill:#F4F7FE,stroke:#0051C2,color:#0051C2,font-size:15px classDef red fill:#DC2626,stroke:#991B1B,color:#FFFFFF classDef neutral fill:#E5E5E5,stroke:#636363,color:#001D4E",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payments/tokenization",
      "type": "guide",
      "title": "Tokenization",
      "description": "Explains how tokenization replaces sensitive payment details with reusable secure tokens or single-use tokens, enabling repeat payments without additional PCI compliance requirements.",
      "headings": [
        "Secure tokens",
        "Single-use tokens"
      ],
      "plainText": "A token is a string that represents a customer’s payment details. Merchants use the token instead of the customer’s payment details to take a payment. To save a customer’s payment details, the merchant uses their POS to send us a tokenization request and we store the customer’s payment details in our vault. We then generate a token and send it to the merchant in the response. Tokens don’t contain any payment details and only the merchant that saved the payment details can use the token. Another benefit of tokenization is that merchants can store the tokens on their devices without any additional PCI compliance requirements. Our gateway can generate two types of tokens: Secure tokens Single-use tokens Secure tokens Secure tokens are useful for repeat payments because the merchant can use them multiple times. Merchants can also use their POS to manage their secure tokens, for example, they can update secure tokens when the customer updates their payment details. When a merchant stores payment details and creates a secure token, they must use a merchant-initiated transaction (MIT) agreement to indicate how they’re going to use the token. There are three options that merchants can choose: Recurring – The merchant takes payments at set intervals until the customer cancels the payments. For example, a monthly magazine subscription. Installment – The merchant takes payments over a fixed period. For example, monthly payments to pay for a household appliance. Unscheduled - Payments are not part of a payment plan or regular billing schedule. For example, a dental practice charges a fee for a missed appointment. Single-use tokens Single-use tokens expire after 30 minutes and merchants can use them only once. After the merchant uses their POS to create a single-use token, they can’t update it or delete it. Because merchants can’t use single-use tokens for repeat payments, they don’t have to provide a MIT agreement.",
      "refs": {
        "workflowIds": [
          "save-a-payment-method",
          "pay-with-single-use-token"
        ],
        "operationIds": [
          "createSecureToken",
          "createSingleUseToken"
        ]
      }
    },
    {
      "route": "/knowledge/payroc-cloud",
      "type": "guide",
      "title": "Payroc Cloud",
      "description": "Explains how Payroc Cloud works as a semi-integrated payments solution, enabling POS systems to communicate with payment devices through the Payroc gateway.",
      "headings": [
        "How it works",
        "Differences with fully integrated solutions",
        "Effort",
        "Security",
        "What we do",
        "What you do"
      ],
      "plainText": "Payroc Cloud is our semi-integrated payments solution that you can use to run card sales and refunds. With Payroc Cloud, your Point of Sale (POS) system uses our gateway to communicate with the payment device. There are two main ways that you can use Payroc Cloud: Separate POS and payment device - Because the communication goes through our gateway, the payment device can be on a different network or even in a different location. POS app and Payroc App on the same payment device - Switch from your POS app to our Payroc App, which captures the card details and then sends them to our gateway. How it works Your POS or POS app sends transaction information to our gateway, which then passes the information to the payment device. The payment device then uses the information to run the transaction. flowchart LR POS[\"Point of Sale\"]:::blue GW[\"Payroc Cloud\"]:::green PD[\"Payment Device\"]:::blue POS <--> GW <--> PD classDef blue fill:#0051C2,stroke:#001D4E,color:#FFFFFF classDef green fill:#00E0B8,stroke:#001D4E,color:#001D4E After the payment device completes the transaction, you can use the methods in our Payroc API to run follow-on actions. Differences with fully integrated solutions Effort Fully integrated: You need to develop a method for your POS to communicate with your payment device. You may also need to develop an app for the payment device. Payroc Cloud: Your POS communicates with the payment device through our gateway. Your POS can even communicate with payment devices on different networks. Security Fully integrated: You need to develop an app for the payment device and make sure it follows the Payment Application Data Security Standards (PA-DSS), or Payment Card Industry Data Security Standards (PCI-DSS). Payroc Cloud: You use our Payroc App, which already follows PCI-DSS principles. What we do We provide the payments devices with the Payroc App installed. Note: When you use Payroc Cloud, the Payroc App runs only sales and refunds. What you do Integrate your POS ",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payroc-cloud/signature-capture",
      "type": "guide",
      "title": "How to send a signature to our gateway",
      "description": "Explains how to capture and encode a customer's handwritten signature as a base-28 coordinate string for submission to the Payroc gateway.",
      "headings": [
        "Constraints",
        "Example"
      ],
      "plainText": "In some requests you can include the customer’s signature, which is used to verify the customer’s identity. To send a signature to our gateway, the signature must be in the correct format. Our gateway uses a series of co-ordinates to represent the customer’s signature. Each co-ordinate consists of an x value and a y value from a 300-pixel by 100-pixel canvas. For example, the co-ordinate (150, 50) represents the center of the canvas. Note: The y-axis starts at the top of the canvas. Canvas When the customer uses a pen or their finger to write their signature on the canvas, you must capture the co-ordinates of the signature. If the customer lifts the pen or their finger from the canvas to start a new line, use 0000 to represent the break between the lines. After the customer writes their signature, convert the co-ordinate values into base-28 then concatenate the co-ordinates into a single string. Note: Our gateway accepts only alphanumeric characters for the signature parameter. Before you send the concatenated string to our gateway, remove any punctuation. Constraints Our gateway accepts only co-ordinates that are smaller than 300 for the x-axis and 100 for the y-axis. If your canvas is greater than 300-pixels by 100-pixels, you can use a 3:1 ratio to scale down the co-ordinates. The maximum length of the signature value must be less than 1600 characters. If the value is greater than 1600 characters, you can decrease the sampling rate to reduce the number of co-ordinates. Example Example signature To represent a capital letter “T” on the canvas, and convert it to a value that our gateway accepts, complete the following steps: Step 1. Capture the decimal co-ordinates of the signature. The decimal co-ordinates of the letter T are: (115, 25), (185, 25) - the top horizontal line. (0000) - new line begins. (150, 25), (150, 75) - the vertical line. Step 2. Convert the decimal co-ordinates into base-28: (43, 0p), (6h, 0p) (0000) (5a, 0p), (5a, 2j) Step 3. Concatenate the b",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/payroc-cloud/supported-devices",
      "type": "guide",
      "title": "Supported Devices",
      "description": "Reference for all card-reading devices supported across Payroc solutions, including device type, operating environment, certified processors, and integration requirements.",
      "headings": [],
      "plainText": "Payroc supports a range of card-reading devices across its solutions. The table includes information about each device that we offer, including: Type - Form factor of the device. Environment - Indicates whether the cardholder operates the device or the merchant operates the device. Certified processors - Payment processors the device is certified to work with. Region - Geographic region where we have certified the device. Integration - Indicates whether the device requires a software integration or can operate as a standalone terminal. Note: If you want to use a device with the Payroc API, we provide SDKs to help you add the device to your integration. For more information about the SDKs, go to the POS and mPOS integration guide. <select id=\"filter-solution\" aria-label=\"Filter by solution\"> <option value=\"\"> Solution </option> <option value=\"payroc-api\"> Payroc API </option> <option value=\"payroc-cloud\"> Payroc Cloud </option> <option value=\"roc-services\"> Roc Services </option> <option value=\"roc-terminal\"> Roc Terminal+ </option> </select> <select id=\"filter-manufacturer\" aria-label=\"Filter by manufacturer\"> <option value=\"\"> Manufacturer </option> <option value=\"bbpos\"> BBPOS </option> <option value=\"idtech\"> IDTech </option> <option value=\"ingenico\"> Ingenico </option> <option value=\"newland\"> Newland </option> <option value=\"pax\"> PAX </option> <option value=\"uic\"> UIC </option> <option value=\"valor\"> Valor </option> </select> <select id=\"filter-type\" aria-label=\"Filter by type\"> <option value=\"\"> Type </option> <option value=\"handheld\"> Handheld </option> <option value=\"countertop\"> Countertop </option> <option value=\"reader\"> Reader </option> <option value=\"self-service\"> Self-service </option> </select> <select id=\"filter-payment-type\" aria-label=\"Filter by payment types\"> <option value=\"\"> Payment types </option> <option value=\"credit\"> Credit </option> <option value=\"pin-debit\"> PIN debit </option> <option value=\"ebt\"> EBT </option> </select> <select id=\"f",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/testing",
      "type": "guide",
      "title": "Testing",
      "description": "Use the simulator and its test transaction values.",
      "headings": [],
      "plainText": "Use the simulator and its test transaction values. Test transaction values Payroc Cloud Simulator",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/testing/payroc-cloud-simulator",
      "type": "guide",
      "title": "Payroc Cloud Simulator",
      "description": "Explains how to use the Payroc Cloud Simulator web app to test card-present payment requests in a virtual environment without a physical device or test card.",
      "headings": [
        "Before you begin",
        "How it works"
      ],
      "plainText": "Our Payroc Cloud Simulator is a web app that simulates our Payroc App on a virtual payment device. You can use the simulator to send requests in a virtual environment without a payment device or a test card. Payroc Cloud Simulator Diagram Before you begin Before you begin, make sure you have the following: A REST client, for example, Postman. Your processing terminal ID. We sent you the processing terminal ID when you signed up with us. Your integration API key. We sent you the API key when you signed up with us. How it works To use the simulator, complete the following steps: Generate a Payroc App API key. Send test requests to our gateway:Access the simulator. Send a request. (Optional) Cancel the request.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/testing/test-transaction-values",
      "type": "guide",
      "title": "Test transaction values",
      "description": "Reference of dollar amounts to use with the Payroc Cloud Simulator to trigger specific card entry methods and transaction behaviors during testing.",
      "headings": [
        "Entry methods",
        "Transaction behavior"
      ],
      "plainText": "You can use our Payroc Cloud Simulator to test your integration with a virtual device. For more information about how to use the simulator, go to Payroc Cloud Simulator. When you use our Payroc Cloud Simulator to test your integration, you can use the following dollar amounts to simulate different entry methods or to trigger a transaction behavior. Entry methods To simulate different entry methods, send one of the following dollar amounts: Entry method Scenario Amount EMV chip With signature $1.00 EMV chip With PIN entry $3.00 EMV chip With fallback $8.00 EMV chip With no cardholder verification > $8.00 Magnetic stripe With no cardholder verification $4.00 Magnetic stripe With signature $5.00 EMV contactless None $6.00 EMV contactless With invalid tags $7.00 Transaction behavior Note: You can test different transaction behaviors only when you run a sale. To trigger a transaction behavior, add one of the following cent amounts to your sale amount, for example, to simulate an EMV contactless transaction with a surcharge, use $6.59. Transaction behavior Amount Cardholder cancels the transaction on the device. $0.99 Device immediately reverses the sale. $0.09 or $0.66 Merchant adds a surcharge to the transaction. Note: This transaction behavior is available only if you’ve selected the Allow Surcharges and Disclose Fee settings in your terminal settings. $0.59",
      "refs": {
        "workflowIds": [
          "run-a-sale-on-a-device"
        ],
        "operationIds": [
          "sendPaymentInstruction"
        ]
      }
    },
    {
      "route": "/knowledge/tooling",
      "type": "guide",
      "title": "Integration tools",
      "description": "Find tools for building your integration.",
      "headings": [],
      "plainText": "Find tools for building your integration. Payroc Skills Marketplace",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/knowledge/tooling/skills-marketplace",
      "type": "guide",
      "title": "Payroc Skills Marketplace",
      "description": "Overview of the Payroc Skills Marketplace, listing available AI-optimized skills for integrating Hosted Fields, Hosted Payment Page, Payment Links, Apple Pay, Google Pay, Payroc Cloud, and Boarding.",
      "headings": [
        "Available skills"
      ],
      "plainText": "AI skills are purpose-built prompts and context files that accelerate your Payroc integration. Load a skill into your AI coding assistant and it already understands Payroc's APIs, authentication patterns, and data models, so you spend less time reading docs and more time shipping. We're actively expanding the marketplace. If the skill you need isn't listed below, check back soon or watch the GitHub repo for new additions. Available skills Hosted FieldsAuthenticate your session Create a payment form Run a sale Save payment details Update payment details Set up repeat payments Hosted Payment PageRun a sale Run a pre-authorization Save payment details Set up repeat payments Payment LinksCreate and share a payment link Extend your integration Apple PayRun a sale Google PayRun a sale Payroc CloudRun a sale Capture a signature Run an unreferenced refund Run a referenced refund Reverse a payment Read a closed-loop card BoardingCreate a merchant platform Create a pricing intent",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/legal/api-terms-of-service",
      "type": "guide",
      "title": "API Terms of Service",
      "description": "Merchant Solutions API Program Terms of Service, last revised March 2026.",
      "headings": [
        "Merchant Solutions API Program Terms of Service",
        "1. Definitions",
        "2. Sandbox Access (Evaluation and Development Only)",
        "3. Production Access Requirements; Merchant Agreement",
        "4. Program Purpose; Permitted Use",
        "5. License Grant",
        "6. Use Restrictions",
        "7. Ownership; Control; Changes; No Obligation",
        "8. Security; Monitoring; Audit",
        "Security",
        "Monitoring and Enforcement",
        "Compliance Verification",
        "Security Incidents",
        "9. Privacy and Data Protection",
        "Payroc's Privacy Policy; Personal Data",
        "Other Merchant Information",
        "Deletion",
        "10. Confidentiality",
        "11. Feedback",
        "12. Disclaimer; Limitation of Liability; Indemnity",
        "Disclaimer",
        "Limitation of Liability",
        "Indemnity",
        "13. Force Majeure",
        "14. Term; Termination; Changes; General Terms",
        "Term",
        "Termination",
        "Modification",
        "Assignment",
        "Governing Law; Venue",
        "Independent Contractors",
        "Severability",
        "No Waiver",
        "E-Sign Consent Agreement",
        "Entire Agreement"
      ],
      "plainText": "Merchant Solutions API Program Terms of Service Last revised: March 2026 BEFORE DOWNLOADING, ACCESSING, OR USING ANY PART OF THE PAYROC APIs, YOU SHOULD CAREFULLY REVIEW THESE TERMS AND CONDITIONS, AS THEY GOVERN ALL ACCESS TO AND USE OF THE PAYROC APIs. THESE TERMS FORM A LEGAL AGREEMENT (THE \"AGREEMENT\") BETWEEN THE INDIVIDUAL OR ENTITY THAT WILL ACCESS OR USE THE PAYROC APIs (\"USER\") AND [PAYROC WORLDACCESS, LLC], ON BEHALF OF ITSELF AND ITS AFFILIATES (\"PAYROC\"). By clicking \"I Accept,\" otherwise indicating acceptance of this Agreement, and/or accessing or using the Payroc APIs, the individual taking such action represents and warrants that they are authorized to bind User to this Agreement. If User does not agree to this Agreement, User must not access or use the Payroc APIs or participate in the Program. IF USER DOES NOT AGREE TO THIS AGREEMENT, USER IS NOT GRANTED PERMISSION TO ACCESS OR USE THE PAYROC APIs IN ANY ENVIRONMENT. The Payroc General Terms of Use (the \"General Terms of Use\") and Merchant Agreement (as defined below) are incorporated herein by reference. In the event of a conflict between this Agreement and the General Terms of Use, or this Agreement and the Merchant Agreement, if any, this Agreement controls solely as to the conflicting provisions with respect to the subject matter hereof. 1. Definitions \"Payroc API\" means: (i) any machine-accessible application programming interface that Payroc makes available to provide access to any Payroc online services (each, a \"Payroc Offering\"), including all associated tools, elements, components, and executables; (ii) any Payroc sample code that enables interaction with a Payroc Offering; and (iii) any documentation that Payroc makes available to facilitate access to or use of the Payroc APIs. \"Program\" means Payroc's Merchant Solutions API Program described in this Agreement. \"User Applications\" means User's customer relationship management systems and other applications that integrate with the Payroc A",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions",
      "type": "guide",
      "title": "One payments platform. Two ways to build on it.",
      "description": "Compare Payroc Essentials for low-code integration with Full Stack for full API access and advanced customization.",
      "headings": [
        "One payments platform. Two ways to build on it.",
        "Essentials or Full Stack",
        "Get up and running with low-code",
        "Build with the full platform",
        "Low-code payment solutions",
        "Hosted Payment Page",
        "Payment Links",
        "Payroc Cloud",
        "Hosted Fields",
        "Payments as part of your product",
        "Board merchants",
        "Take payments",
        "View reports",
        "Fund merchants",
        "Choose your next step",
        "Follow a guide",
        "Explore the API",
        "Follow a workflow",
        "Find the right solution for your integration."
      ],
      "plainText": "Solutions One payments platform. Two ways to build on it. Payroc offers two integration tracks to fit different partner needs. Get up and running with minimal development effort, or build with the full power of our platform. Compare Essentials and Full Stack Explore the integration guides Low-code Essentials integration Full API Full Stack integration In person Payment device solutions Online Hosted and API payment options Choose your path Essentials or Full Stack Choose the integration effort, feature set and level of control that fit your team. Essentials Get up and running with low-code Powerful payment solutions without a lengthy development project. Attribute Essentials Best for Quick setup, self-service integration Integration effort Low-code Features Reduced feature set Payroc involvement Minimal after setup Upgrade path Contact us to move to Full Stack at any time Explore Essentials Essentials overview Full Stack Build with the full platform Deep API integrations, advanced features and closer Payroc partnership. Attribute Full Stack Best for Deep customization and control Integration effort Full API Features Full feature set Payroc involvement Closer ongoing partnership Capabilities Board merchants, take payments, view reports and fund merchants Explore Full Stack Full Stack overview Essentials Low-code payment solutions Choose from in-person and online payment options. Once you have your API key, our self-service solutions let you integrate and go live on your own schedule. Hosted Payment Page Add a secure Payroc-hosted payment page to a merchant's website. We handle the customer's sensitive payment information, reducing the merchant's PCI compliance obligations. No payment form to build or maintain Card and bank transfer payments One-time payments and subscription billing Customizable checkout experience Online Channel Low-code Integration Learn about Hosted Payment Page Payment Links Create a shareable link to a secure hosted payment page. Request payment",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials",
      "type": "guide",
      "title": "Essentials",
      "description": "Overview of Essentials as a suite of low-code payment solutions for merchants who want fast, self-service integration for in-person and online payments.",
      "headings": [
        "In-person payments",
        "Online payments"
      ],
      "plainText": "Our Essentials solutions are low-code payment options designed to get you up and running quickly without a lengthy development project. Because our Essentials solutions are self-service by design, once you have your API key you can integrate and go live on your own schedule. Low-code setup - Integrate without building a full API implementation from scratch. In-person and online options - Choose the solution that fits your needs. Upgrade at any time - Start your journey with our Essentials solutions and upgrade to Full Stack at any time. In-person payments Take payments at the counter with minimal setup and no deep device integrations. Learn more about in-person payments → Online payments Add a payment experience to any website or send a payment link, with minimal development effort. Learn more about online payments →",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/guides",
      "type": "guide",
      "title": "Essentials Guides",
      "description": "Explore step-by-step guides for integrating with Payroc Cloud, Hosted Payment Page, Hosted Fields, and Payment Links.",
      "headings": [
        "Take payments",
        "Payroc Cloud",
        "Hosted Payment Page",
        "Hosted Fields",
        "Payment Links"
      ],
      "plainText": "Prerequisites: Authentication AI skills are available for our Essentials Solutions, get them on the Skills Marketplace (GitHub). Our Essentials guides provide step-by-step instructions to help you integrate with our low-code payment solutions. Take payments Payroc Cloud Use our gateway to initiate payments and refunds on a physical payment device. Hosted Payment Page Add a secure hosted payment page to a merchant's website. Hosted Fields Embed secure payment fields directly into a merchant's checkout page. Payment Links Create a payment link that a merchant shares with a customer.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/in-person-payments",
      "type": "guide",
      "title": "In-person payments",
      "description": "Overview of Payroc Essentials in-person payment solutions, including Payroc Cloud, Roc Terminal+, and Roc Services for point-of-sale payment acceptance.",
      "headings": [
        "Payroc Cloud",
        "Roc Terminal+",
        "Roc Services"
      ],
      "plainText": "Our Essentials in-person payment solutions give you a range of options for taking payments at the point of sale, from connecting your existing POS to payment devices to fully managed no-code payment and invoicing apps. Payroc Cloud Use our semi-integrated solution to run transactions without a direct connection between the POS and payment device. Learn more about Payroc Cloud → Roc Terminal+ Accept in-person and online payments with our no-code payment terminal. Learn more about Roc Terminal+ → Roc Services Handle scheduling, invoicing, and payments in one system. Learn more about Roc Services →",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/in-person-payments/payroc-cloud",
      "type": "guide",
      "title": "Payroc Cloud",
      "description": "Overview of Payroc Cloud as a semi-integrated POS payment solution that connects payment devices to a POS system through the gateway without requiring a direct device connection.",
      "headings": [
        "Key capabilities",
        "How to use Payroc Cloud",
        "You might also be interested in...",
        "Roc Terminal+",
        "Roc Services"
      ],
      "plainText": "Payroc Cloud is our semi-integrated payments solution that allows your POS to communicate with payment devices through our gateway to run card sales and refunds. The key advantage is that your POS doesn't need a direct connection to the payment device. Payroc Cloud is an ideal Essentials solution if you want to use payment devices in different physical locations from your POS and want to get set up quickly with minimal development effort. Payroc Cloud solution image Key capabilities Speed and simplicity Integrate with just a few lines of code. Access over 30 payment devices through a single integration. Get up and running quicker, with significantly less coding, testing, and certification than traditional API integrations. Scalability Integrate new devices seamlessly with no additional development work. Add new features and technologies as they become available with minimal effort. Use Android or non-Android payment devices or both. Security Use our PCI-DSS-compliant Payroc app that is available for Android devices. Eliminate the need to develop your own payment application or handle sensitive card data directly. Cloud-based management Sync and update payment devices easily via the cloud. Remove the need for physical connections between your POS and your payment devices. Operate anywhere with an internet connection. How to use Payroc Cloud Use our low-code API solution to integrate your POS with Payroc Cloud. To view our integration guides, go to Payroc Cloud. After you integrate with Payroc Cloud, you can use our Payroc Cloud Simulator to test your integration without using a physical device. For more information, go to Payroc Cloud Simulator. You might also be interested in... Roc Terminal+ Accept in-person and online payments with our no-code payment terminal. Roc Services Handle scheduling, invoicing, and payments in one system.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/in-person-payments/roc-services",
      "type": "guide",
      "title": "Roc Services",
      "description": "Overview of Roc Services as a no-code scheduling, invoicing, and payment solution for service-based merchants on desktop and mobile.",
      "headings": [
        "Key capabilities",
        "How to use Roc Services",
        "You might also be interested in...",
        "Payment Links",
        "Roc Terminal+",
        "Payroc Cloud"
      ],
      "plainText": "Roc Services is our scheduling and invoicing solution for service-based merchants. Optimized for both desktop and mobile, Roc Services brings appointments, payments, and reporting together in a single, easy-to-use solution. Roc Services is ideal if you need a no-code invoicing tool that scales with your merchants' businesses. Roc services image Key capabilities Convenience and flexibility Facilitate payments on-the-go from any location where merchants have internet access. Support recurring payments to help merchants automate consistent and timely customer billing. Provide built-in tools for merchants to send estimates and invoices directly to their customers. Appointment and customer management Help merchants reduce missed appointments with automated reminders. Let merchants store customer information and transaction history to strengthen merchant-customer relationships. Ensure service traceability for merchants by linking estimates and invoices to appointments in the scheduler. Synchronize Roc Services with QuickBooks for accurate, real-time accounting. Multi-platform and multi-user capability Offer a full-featured desktop application with virtual terminal, reporting, and scheduling tools. Set up the mobile app on Android and iOS with our optional card reader to provide extra payment convenience for merchants in the field. Allow merchants to configure and manage multiple user roles across both in-office and field operations. Customizable and scalable Give merchants the tools to build complete catalogs for easy management of their products and services. Deliver detailed reporting capabilities so merchants can monitor performance across services, users, and locations. How to use Roc Services We provide everything to quickly get merchants up and running with Roc Services on both desktop and mobile. For more information about getting set up with Roc Services, contact us. To view helpful articles about how to use Roc Services, go to our Support Hub. You might also be i",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/in-person-payments/roc-terminal",
      "type": "guide",
      "title": "Roc Terminal+",
      "description": "Overview of Roc Terminal+ as a no-code, multi-platform in-person payment solution supporting cards, bank transfers, recurring payments, and pre-authorizations on desktop, mobile, and compatible payment devices.",
      "headings": [
        "Key capabilities",
        "How to use Roc Terminal+",
        "You might also be interested in...",
        "Payment Links",
        "Roc Services",
        "Payroc Cloud"
      ],
      "plainText": "Roc Terminal+ is our versatile payment solution that lets merchants accept a wide range of payments from a single application. Roc Terminal+ is optimized to run on desktop, mobile, and compatible payment devices, providing a seamless and adaptable solution that scales with any business. Roc Terminal+ is perfect if you need a no-code solution with a rapid setup-to-market timeline. Roc Terminal plus Key capabilities Flexible payment processing Facilitate a wide range of payment types from a single terminal, including cards, bank transfers, cash, and gift cards. Enable recurring payments, pre-authorizations, and remote payment links to support diverse billing and checkout workflows. Deliver mobile payment convenience with Bluetooth card-reader compatibility for merchants who are on the go. Multi-platform capability Set up Roc Terminal+ on desktop to provide your merchants with a full-featured application, including an optional virtual terminal. Give your merchants the ability to accept payments anywhere with Roc Terminal+ mobile apps on iOS and Android. Deploy Roc Terminal+ directly on compatible payment devices such as the Newland N950 and X800 for maximum versatility. Reporting, transaction, and inventory management Provide your merchants with real-time and historical transaction data to gain visibility into business trends and product performance. Synchronize Roc Terminal+ with QuickBooks for accurate, real-time accounting. Support inventory management to keep product data organized and up to date. How to use Roc Terminal+ We provide you with everything you need to quickly onboard merchants to Roc Terminal+. We set up all Roc Terminal+ merchants on the desktop application, and can extend their setup to the mobile application on iOS, Android, or compatible payment devices based on their requirements. For more information about getting set up with Roc Terminal+, contact us. To view helpful articles about how to use Roc Terminal+, go to our Support Hub. You might also ",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/online-payments",
      "type": "guide",
      "title": "Online payments",
      "description": "Overview of Essentials online payment solutions including Hosted Fields, Hosted Payment Page, Payment Links, and no-code terminal and invoicing options.",
      "headings": [
        "Hosted Fields",
        "Hosted Payment Page",
        "Payment Links",
        "Roc Terminal+",
        "Roc Services"
      ],
      "plainText": "Our Essentials online payment solutions give you a range of options for taking payments online, from embedding payment fields directly in your checkout to sending a payment link with no website integration needed. Hosted Fields Add secure payment fields directly into a merchant's checkout page. Learn more about Hosted Fields → Hosted Payment Page Add a secure payment page to a merchant's website. Learn more about Hosted Payment Page → Payment Links Generate and send URLs to collect payments from customers. Learn more about Payment Links → Roc Terminal+ Accept in-person and online payments with our no-code payment terminal. Learn more about Roc Terminal+ → Roc Services Handle scheduling, invoicing, and payments in one system. Learn more about Roc Services →",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/online-payments/hosted-fields",
      "type": "guide",
      "title": "Hosted Fields",
      "description": "Overview of Hosted Fields as an online payment solution for merchants who want to embed card, ACH, and PAD payment forms directly into their checkout page without redirects.",
      "headings": [
        "Key capabilities",
        "How to use Hosted Fields",
        "You might also be interested in...",
        "Hosted Payment Page",
        "Payment Links"
      ],
      "plainText": "Our Hosted Fields solution lets you add payment fields directly to a merchant's checkout page, allowing customers to complete payments without any redirects or interruptions. Hosted Fields are ideal for an online retailer or any business that needs to accept payments directly on their platforms without the complexity of handling sensitive payment data. Key capabilities Seamless checkout experience Embed payment fields directly on a merchant's website or mobile application. Provide built-in input validation that detects invalid values and provides immediate feedback to customers. Support both desktop and mobile applications. Secure data handling Reduce the merchant's PCI compliance burden by hosting the payment fields. Process payments securely using tokenized payment details. Launch or update your checkout workflow quickly with security and compliance handled for you. Versatile payment options Accept card, ACH, and PAD payments. Use the payment form to run a sale, save a customer's payment details, or update a customer's saved payment details. Customizable checkout Customize the appearance of the checkout page to match the merchant's branding. Add custom fields to collect additional information from the customer. How to use Hosted Fields Use our Hosted Fields solution to create a payment form to take payments and manage customers' payment details. For detailed integration steps, go to our integration guide for Hosted Fields. To perform follow-on actions for Hosted Fields transactions, such as refunds and reversals, you need to integrate with our API. For more information about our API, go to our API Explorer. You might also be interested in... Hosted Payment Page Add a secure payment page to a merchant's website. Payment Links Generate and send URLs to collect payments from customers.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/online-payments/hosted-payment-page",
      "type": "guide",
      "title": "Hosted Payment Page",
      "description": "Overview of Hosted Payment Page as a low-code online payment solution for merchants who want a Payroc-hosted, PCI-compliant checkout page.",
      "headings": [
        "Key capabilities",
        "How to use our Hosted Payment Page",
        "API integration",
        "Self-Care Portal",
        "You might also be interested in...",
        "Hosted Fields",
        "Payment Links"
      ],
      "plainText": "Our Hosted Payment Page solution allows merchants to easily add a secure payment page to their website, enabling customers to enter their payment details safely. Because we host the page, we handle the customer's sensitive payment information, significantly reducing the merchant's PCI compliance obligations. Our Hosted Payment Page solution is a low-code option for businesses that want to accept online payments without the complexity of handling sensitive payment data. Key capabilities Simple, low-effort integration Eliminate the need to build or maintain your own payment form. Reduce the merchant's PCI scope by relying on us to handle all sensitive payment data. Flexible payment capabilities Accept card payments or bank transfer payments. Expand your payment options to digital wallets and cryptocurrency with BeadPay. Support one-time payments, pre-authorizations, delayed captures, and subscription billing. Use tokenization for recurring and merchant-initiated transactions. Take advantage of built-in security tools like 3-D Secure and AVS. Customizable, scalable checkout experience Present a clean and responsive UI across desktop, tablet, and mobile devices. Customize the checkout process for your customers for a seamless experience. How to use our Hosted Payment Page There are two ways to use our Hosted Payment Page: Integrate with our API. Use our Self-Care Portal. API integration Integrate with our low-code Hosted Payment Page methods to add a payment page to a merchant's website. For detailed integration steps, go to our integration guide for Hosted Payment Page. To perform follow-on actions, such as refunds, integrate with our other Payments methods. For more information about our Payroc API and other follow-on actions, go to our API Explorer. Self-Care Portal You can create a Hosted Payment Page on our Self-Care Portal. For more information about how to use the Self-Care Portal to create a Hosted Payment Page, contact us. You might also be interested in... Hos",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/online-payments/payment-links",
      "type": "guide",
      "title": "Payment Links",
      "description": "Overview of Payment Links as a solution for merchants to create and share secure hosted payment URLs without requiring a website or checkout integration.",
      "headings": [
        "Key capabilities",
        "How to use Payment Links",
        "API Integration",
        "Self-Care Portal",
        "You might also be interested in...",
        "Hosted Fields",
        "Hosted Payment Page"
      ],
      "plainText": "Our Payment Links solution allows a merchant to create a shareable link that directs a customer to a secure hosted payment page. The customer selects the link, completes the payment, and the merchant receives the funds, with no website or checkout integration needed. Payment links are ideal for a wide range of use cases, including invoices, donations, one-off purchases, bill payments, and any scenario where businesses need to request and receive payments quickly and reliably. Payment Links solution image Key capabilities On-demand link creation Generate payment links on demand. Share links through the merchant's preferred channel. Use our API or Self-Care Portal interchangeably. Flexible configuration Create one-time links or reusable links. Choose between a sale transaction or pre-authorization transaction. Set up a fixed amount or allow the customer to enter the amount. Accept card payments, bank transfer, or both. Secure payment processing Redirect customers to a PCI-compliant payment page to make payments. Limit the merchant's PCI scope as no merchant website is needed. Tracking and reporting View payment statuses to check if the payment is completed or failed. Access reporting for reconciliation and activity monitoring. Manage links and follow-on actions from either the API or Self-Care Portal. How to use Payment Links There are two ways to use Payment Links: Integrate with our API. Use our Self-Care Portal. Both options provide the same capabilities to create, share, and manage payment links. They also use the same payment link data, so you can create a payment link with one option, and then share the payment link with the other option. API Integration Integrate with our low-code Payment Links endpoints to create payment links and share them. For detailed integration steps, go to our integration guide for Payment Links. To perform follow-on actions, such as refunds, integrate with our other Payments methods. For more information about our Payroc API and other ",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/online-payments/roc-services",
      "type": "guide",
      "title": "Roc Services",
      "description": "Overview of Roc Services as a no-code scheduling and invoicing solution for service-based merchants, covering appointments, recurring payments, and reporting.",
      "headings": [
        "Key capabilities",
        "How to use Roc Services",
        "You might also be interested in...",
        "Payment Links",
        "Roc Terminal+",
        "Payroc Cloud"
      ],
      "plainText": "Roc Services is our scheduling and invoicing solution for service-based merchants. Optimized for both desktop and mobile, Roc Services brings appointments, payments, and reporting together in a single, easy-to-use solution. Roc Services is ideal if you need a no-code invoicing tool that scales with your merchants' businesses. Roc services image Key capabilities Convenience and flexibility Facilitate payments on-the-go from any location where merchants have internet access. Support recurring payments to help merchants automate consistent and timely customer billing. Provide built-in tools for merchants to send estimates and invoices directly to their customers. Appointment and customer management Help merchants reduce missed appointments with automated reminders. Let merchants store customer information and transaction history to strengthen merchant-customer relationships. Ensure service traceability for merchants by linking estimates and invoices to appointments in the scheduler. Synchronize Roc Services with QuickBooks for accurate, real-time accounting. Multi-platform and multi-user capability Offer a full-featured desktop application with virtual terminal, reporting, and scheduling tools. Set up the mobile app on Android and iOS with our optional card reader to provide extra payment convenience for merchants in the field. Allow merchants to configure and manage multiple user roles across both in-office and field operations. Customizable and scalable Give merchants the tools to build complete catalogs for easy management of their products and services. Deliver detailed reporting capabilities so merchants can monitor performance across services, users, and locations. How to use Roc Services We provide everything to quickly get merchants up and running with Roc Services on both desktop and mobile. For more information about getting set up with Roc Services, contact us. To view helpful articles about how to use Roc Services, go to our Support Hub. You might also be i",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/essentials/online-payments/roc-terminal",
      "type": "guide",
      "title": "Roc Terminal+",
      "description": "Overview of Roc Terminal+ as a no-code, multi-platform payment solution for accepting cards, bank transfers, and recurring payments from a single application.",
      "headings": [
        "Key capabilities",
        "How to use Roc Terminal+",
        "You might also be interested in...",
        "Payment Links",
        "Roc Services",
        "Payroc Cloud"
      ],
      "plainText": "Roc Terminal+ is our versatile payment solution that lets merchants accept a wide range of payments from a single application. Roc Terminal+ is optimized to run on desktop, mobile, and compatible payment devices, providing a seamless and adaptable solution that scales with any business. Roc Terminal+ is perfect if you need a no-code solution with a rapid setup-to-market timeline. Roc Terminal plus Key capabilities Flexible payment processing Facilitate a wide range of payment types from a single terminal, including cards, bank transfers, cash, and gift cards. Enable recurring payments, pre-authorizations, and remote payment links to support diverse billing and checkout workflows. Deliver mobile payment convenience with Bluetooth card-reader compatibility for merchants who are on the go. Multi-platform capability Set up Roc Terminal+ on desktop to provide your merchants with a full-featured application, including an optional virtual terminal. Give your merchants the ability to accept payments anywhere with Roc Terminal+ mobile apps on iOS and Android. Deploy Roc Terminal+ directly on compatible payment devices such as the Newland N950 and X800 for maximum versatility. Reporting, transaction, and inventory management Provide your merchants with real-time and historical transaction data to gain visibility into business trends and product performance. Synchronize Roc Terminal+ with QuickBooks for accurate, real-time accounting. Support inventory management to keep product data organized and up to date. How to use Roc Terminal+ We provide you with everything you need to quickly onboard merchants to Roc Terminal+. We set up all Roc Terminal+ merchants on the desktop application, and can extend their setup to the mobile application on iOS, Android, or compatible payment devices based on their requirements. For more information about getting set up with Roc Terminal+, contact us. To view helpful articles about how to use Roc Terminal+, go to our Support Hub. You might also ",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack",
      "type": "guide",
      "title": "Full Stack",
      "description": "Overview of Full Stack solutions covering end-to-end payment platform capabilities including merchant boarding, in-person and online payments, reporting, and merchant funding.",
      "headings": [
        "Board merchants",
        "Boarding",
        "Take payments",
        "In-person payments",
        "Online payments",
        "View reports",
        "Real-time transaction data",
        "Settlement data",
        "Fund merchants",
        "Funding",
        "Questions?",
        "Contact us"
      ],
      "plainText": "Whether you need a single, specialized solution or a complete end-to-end payments platform, our Full Stack solutions give you the full power of our platform. Full Stack solutions cover how to: Board merchants Take payments View reports Fund merchants Board merchants Boarding Scale your business by adding merchants with our boarding solutions. Take payments In-person payments Use physical devices to run payments at the point of sale. Online payments Run online payments with our e-commerce solutions. View reports Real-time transaction data Access live transaction data from your merchants. Settlement data View settled transactions and batches to reconcile transactions and verify merchant payouts. Fund merchants Funding Pay your merchants with our funding solutions. Questions? Contact us If you are still unsure about which solution fits your needs, contact our experts to help get you on the right track.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/board-merchants",
      "type": "guide",
      "title": "Board merchants",
      "description": "Onboard and configure your merchants.",
      "headings": [],
      "plainText": "Onboard and configure your merchants. Boarding",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/board-merchants/boarding",
      "type": "guide",
      "title": "Boarding",
      "description": "Overview of the Boarding solution for digitally onboarding merchants by submitting their information programmatically to enable faster account setup.",
      "headings": [
        "Key capabilities",
        "How to use Boarding"
      ],
      "plainText": "Our Boarding solution allows you to digitally onboard merchants by submitting their information directly from your own software. This removes manual paperwork and speeds up account setup, giving both you and your merchants a smoother onboarding experience. If a full API integration isn't the right fit for you, contact us to discuss alternative boarding options. Key capabilities Speed and efficiency Enable merchants to go live quickly with faster application-to-processing time. Reduce the paperwork burden with a fully digital submission process. Provide just a few key pieces of information to onboard a merchant. Seamless integration Submit boarding information through a single integration point. Customize your platform by using only the components you need. Flexibility Support merchants with multiple locations, brands, or business units. Add processing accounts and contacts as the merchant grows. Security and compliance Focus on working with your merchants while we handle due diligence and risk assessments behind the scenes. Use our expert underwriting team to ensure merchant compliance. How to use Boarding Integrate with our medium-code Boarding endpoints to submit a merchant's legal information and processing account information. After you have boarded the merchant, you can perform follow-on actions, such as adding a processing account or ordering a terminal. For detailed integration steps, go to our integration guide for Boarding.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/fund-merchants",
      "type": "guide",
      "title": "Fund merchants",
      "description": "Fund your merchants and configure funding recipients.",
      "headings": [],
      "plainText": "Fund your merchants and configure funding recipients. Funding",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/fund-merchants/funding",
      "type": "guide",
      "title": "Funding",
      "description": "Overview of the Funding solution for controlling how and when settled transaction funds are delivered to merchant bank accounts, covering standard and dynamic funding models.",
      "headings": [
        "Different funding models",
        "Key capabilities of the standard funding model",
        "Key capabilities of the dynamic funding model",
        "How to use Funding"
      ],
      "plainText": "Use our Funding solution to determine how and when settled transaction funds are delivered to a merchant's bank account. We offer a standard funding model and dynamic funding model , so you can choose the model that best fits the merchant's business and operational needs. Different funding models Aspect Standard funding model Dynamic funding model Ideal for Traditional merchants who want a straightforward flow of funds from their daily sales. Partners and large merchants who run complex operations, such as multi-brand, multi-location, marketplaces, and platforms. Speed of setup Fast - Default option that requires minimal setup. Moderate - API integration that requires you to define allocation rules and account structure. Flexibility Low - Built for simplicity and predictability. High - Supports complex business models and payout scenarios. Deposit structure We send a single, fixed deposit to the merchant's bank account. You can distribute funds across multiple accounts. Cash flow control Merchant automatically receives full deposit minus fees. You can control how funds are distributed. Key capabilities of the standard funding model Simple, routine deposits Schedule fixed daily deposits, which gives merchants clear visibility of payouts. Support merchants with predictable transaction patterns. Fast setup Quickly activate new merchants at boarding. Include standard fee and billing arrangements. Advanced fee handling Separate billing and deposit accounts to manage fee deductions more precisely. Reduce volatility in deposits by isolating fees from settlement amounts. Key capabilities of the dynamic funding model Flexible fund allocation Distribute funds across multiple bank accounts based on business logic, operational needs, or risk. Control when each merchant and third party receives funds. Advanced fee handling Separate billing and deposit accounts to manage fee deductions more precisely. Reduce volatility in deposits by isolating fees from settlement amounts. Scalab",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/guides",
      "type": "guide",
      "title": "Integration guides",
      "description": "Explore guides for boarding merchants, taking payments, and funding merchants with the Payroc API.",
      "headings": [
        "Board merchants",
        "Boarding",
        "Event subscriptions",
        "Take payments",
        "Payments",
        "Payroc Cloud",
        "Payment Links",
        "Hosted Fields",
        "Apple Pay®",
        "Google Pay®",
        "Repeat payments",
        "Save payment details",
        "Update saved payment details",
        "3-D Secure",
        "Add custom fields",
        "Fund merchants",
        "Set up a funding recipient",
        "Send funds to your merchants"
      ],
      "plainText": "Prerequisites: Authentication AI skills are available for some of our Full Stack Solutions, get them on the Skills Marketplace (GitHub). Our integration guides provide you with concise information and instructions to help you integrate with the key functions of our API. Board merchants Boarding Board merchants to our payments platform. Event subscriptions Add event notifications to your integration. Take payments Payments Take payments and refunds from cards, bank accounts, or digital wallets. Payroc Cloud Use our gateway to initiate a payment or a refund on a physical device. Payment Links Create a payment link that a merchant shares with a customer. Hosted Fields Add Hosted Fields to your webpage. Apple Pay® Run online transactions with Apple Pay. Google Pay® Run online transactions with Google Pay. Repeat payments Create and manage repeat payments using our gateway or your own software. Save payment details Tokenize and save payment details. Update saved payment details Update payment details that you previously saved. 3-D Secure Use 3-D Secure to verify a cardholder's identity. Add custom fields Allow merchants to add their own information to transactions. Fund merchants Set up a funding recipient Set up Funding Recipients that can receive funds from your account. Send funds to your merchants Create Funding Instructions to send funds to your merchants.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/take-payments",
      "type": "guide",
      "title": "Take payments",
      "description": "Accept in-person and online payments with Full Stack.",
      "headings": [],
      "plainText": "Accept in-person and online payments with Full Stack. In-person payments Online payments",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/take-payments/in-person-payments",
      "type": "guide",
      "title": "In-person payments",
      "description": "Overview of in-person payment solutions for merchants, covering API-based, semi-integrated, terminal, and invoicing options.",
      "headings": [
        "Payroc API",
        "Payroc Cloud",
        "Tap to Pay on iPhone",
        "Roc Terminal+",
        "Roc Services"
      ],
      "plainText": "Explore how our in-person payment solutions can fit your needs. Payroc API Offer a full payment acceptance solution with broad capabilities. Learn more about our Payroc API → Payroc Cloud Use our semi-integrated solution to run transactions without a direct connection between the POS and payment device. Learn more about Payroc Cloud → Tap to Pay on iPhone Accept contactless payments on an iPhone without any other hardware. Learn more about Tap to Pay on iPhone → Roc Terminal+ Accept in-person and online payments with our no-code payment terminal. Learn more about Roc Terminal+ → Roc Services Handle scheduling, invoicing, and payments in one system. Learn more about Roc Services →",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/take-payments/in-person-payments/payroc-api",
      "type": "guide",
      "title": "Payroc API for in-person payments",
      "description": "Overview of the Payroc API as a fully customizable in-person payment solution for processing sales, pre-authorizations, refunds, and more with certified payment devices.",
      "headings": [
        "Key capabilities",
        "How to use the Payroc API",
        "You might also be interested in...",
        "Payroc Cloud",
        "Roc Terminal+",
        "Payroc API for online payments"
      ],
      "plainText": "Use our powerful API to design and integrate the perfect payment flow for your merchants. Integrate with any of our methods to build a fully customizable payment solution that delivers the exact look and functionality that your merchant needs. Our Payroc API is ideal if you want to have full control over the payment flow that you want to offer. API solution image Key capabilities Maximum flexibility Process all types of transactions, including sales, pre-authorizations, captures, refunds, and reversals. Use our API with our certified payment devices or with your own choice of terminals. Select from multiple form factors designed to fit seamlessly into any retail setting. Expand your integration and easily deploy new devices and add powerful features. Provide a unified experience between in-person payments and online payments. Powerful features Offer surcharging and dual pricing options to offset the merchant's processing fees. Support offline processing, tipping, and custom data fields. Accept specialized cards like EBT SNAP and healthcare cards. Run reports to gain immediate, actionable insights for your merchants. Advanced fraud prevention Use tokenization to protect payment information and simplify a merchant's PCI compliance requirements. Rely on our built-in encryption tools for every transaction to instantly meet security standards with zero effort. Enable signature capture for easy record-keeping, audit trails, and efficient dispute resolution. Speed to market Choose from our collection of certified devices and instantly eliminate lengthy certification roadblocks. Lean on our experts for ongoing support and advice to get the most out of your solution. Follow our comprehensive guides to streamline your development process. How to use the Payroc API Follow our comprehensive guides to quickly launch your integration. Our guides cover the basic functions of the API, including: Run sales and refunds. Save a customer's payment details. Verify a customer's payment d",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/take-payments/in-person-payments/payroc-cloud",
      "type": "guide",
      "title": "Payroc Cloud",
      "description": "Overview of Payroc Cloud as a semi-integrated POS payments solution that connects payment devices to your POS through the gateway without requiring a direct device connection.",
      "headings": [
        "Key capabilities",
        "How to use Payroc Cloud",
        "You might also be interested in...",
        "Payroc API",
        "Roc Terminal+"
      ],
      "plainText": "Payroc Cloud is our semi-integrated payments solution that allows your POS to communicate with payment devices through our gateway to run card sales and refunds. The key advantage is that your POS doesn't need a direct connection to the payment device. Payroc Cloud is an ideal solution if you want to use payment devices in different physical locations from your POS and want to get set up quickly with minimal development effort. Payroc Cloud solution image Key capabilities Speed and simplicity Integrate with just a few lines of code. Access over 30 payment devices through a single integration. Get up and running quicker, with significantly less coding, testing, and certification than traditional API integrations. Scalability Integrate new devices seamlessly with no additional development work. Add new features and technologies as they become available with minimal effort. Use Android or non-Android payment devices or both. Security Use our PCI-DSS-compliant Payroc app that is available for Android devices. Eliminate the need to develop your own payment application or handle sensitive card data directly. Cloud-based management Sync and update payment devices easily via the cloud. Remove the need for physical connections between your POS and your payment devices. Operate anywhere with an internet connection. How to use Payroc Cloud Use our low-code API solution to integrate your POS with Payroc Cloud. To view our API guides, which include detailed integration steps, go to Payroc Cloud. After you integrate with Payroc Cloud, you can use our Payroc Cloud Simulator to test your integration without using a physical device. For more information, go to Payroc Cloud Simulator. To perform follow-on actions, such as refunds, integrate with our other Payments methods. For more information about our Payroc API and other follow-on actions, go to our API Explorer. You might also be interested in... Payroc API Offer a full payment acceptance solution with broad capabilities. Roc Ter",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/take-payments/in-person-payments/tap-to-pay-on-iphone",
      "type": "guide",
      "title": "Tap to Pay on iPhone",
      "description": "Overview of Tap to Pay on iPhone as an in-person payment solution that lets merchants accept contactless payments directly on an iPhone without external hardware.",
      "headings": [
        "Key capabilities",
        "No additional hardware",
        "Broad support",
        "Core transaction types",
        "How to use Tap to Pay on iPhone",
        "You might also be interested in…",
        "Roc Services",
        "Roc Terminal+",
        "Payroc Cloud"
      ],
      "plainText": "Tap to Pay on iPhone is a solution that allows merchants to accept contactless payments on their iPhone without any other hardware. Merchants can use Tap to Pay on iPhone to run transactions with credit and debit cards, Apple Pay, and other digital wallets. We provide you with an SDK that you can integrate with your iOS app to offer a seamless checkout experience without the need for additional hardware. Tap to Pay on iPhone is an ideal solution if you want to quickly set up merchants to accept in-person payments without the need for external card readers or payment devices. Key capabilities No additional hardware Accept card-present payments on an iPhone using Apple's ProximityReader technology. Remove the need for external terminals or card readers. Broad support Deploy instantly with no hardware setup or certification delays. Download the SDK package complete with documentation and sample apps to accelerate development. Core transaction types Run sales and referenced refunds. Accept contactless credit and debit cards, Apple Pay, and other digital wallets that use NFC. How to use Tap to Pay on iPhone Use our Tap to Pay on iPhone SDK to create your own iOS app that accepts card-present payments directly on an iPhone. To view our guides, which include detailed steps, go to Tap to Pay on iPhone guides. We can also provide a ready-to-use app that you can deploy to your merchants. The Mobile Sync app uses our Tap to Pay on iPhone SDK to let your merchants accept payments straightaway. For information about the Mobile Sync app, contact us. You might also be interested in… Roc Services Handle scheduling, invoicing, and payments in one system. Roc Terminal+ Accept in-person and online payments with our no-code payment terminal. Payroc Cloud Use our semi-integrated solution to run transactions without a direct connection between the POS and payment device.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/take-payments/online-payments",
      "type": "guide",
      "title": "Online payments",
      "description": "Overview of Payroc's online payment solutions, including the Payroc API, Payment Links, Hosted Fields, Hosted Payment Page, and no-code terminal options.",
      "headings": [
        "Payroc API",
        "Payment Links",
        "Hosted Fields",
        "Hosted Payment Page",
        "Roc Terminal+",
        "Roc Services"
      ],
      "plainText": "Explore how our online payment solutions can fit your needs. Payroc API Offer a full payment acceptance solution with broad capabilities. Learn more about our Payroc API → Payment Links Generate and send URLs to collect payments from customers. Learn more about Payment Links → Hosted Fields Add secure payment fields directly into a merchant's checkout page. Learn more about Hosted Fields → Hosted Payment Page Add a secure payment page to a merchant’s website. Learn more about Hosted Payment Page → Roc Terminal+ Accept in-person and online payments with our no-code payment terminal. Learn more about Roc Terminal+ → Roc Services Handle scheduling, invoicing, and payments in one system. Learn more about Roc Services →",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/take-payments/online-payments/hosted-fields",
      "type": "guide",
      "title": "Hosted Fields",
      "description": "Overview of Hosted Fields as an online payment solution for merchants who want embedded checkout forms that accept card, ACH, and PAD payments without redirects.",
      "headings": [
        "Key capabilities",
        "How to use Hosted Fields",
        "You might also be interested in...",
        "Payroc API",
        "Hosted Payment Page",
        "Payment Links"
      ],
      "plainText": "Our Hosted Fields solution lets you add payment fields directly to a merchant's checkout page, allowing customers to complete payments without any redirects or interruptions. Hosted Fields are ideal for an online retailer or any business that needs to accept payments directly on their platforms without the complexity of handling sensitive payment data. Key capabilities Seamless checkout experience Embed payment fields directly on a merchant’s website or mobile application. Provide built-in input validation that detects invalid values and provides immediate feedback to customers. Support both desktop and mobile applications. Secure data handling Reduce the merchant’s PCI compliance burden by hosting the payment fields. Process payments securely using tokenized payment details. Launch or update your checkout workflow quickly with security and compliance handled for you. Versatile payment options Accept card, ACH, and PAD payments. Use the payment form to run a sale, save a customer’s payment details, or update a customer’s saved payment details. Customizable checkout Customize the appearance of the checkout page to match the merchant's branding. Add custom fields to collect additional information from the customer. How to use Hosted Fields Use our Hosted Fields solution to create a payment form to take payments and manage customers’ payment details. For detailed integration steps, go to our integration guide for Hosted Fields. To perform follow-on actions for Hosted Fields transactions, such as refunds and reversals, you need to integrate with our API. For more information about our API, go to our API Explorer. You might also be interested in... Payroc API Offer a full payment acceptance solution with broad capabilities. Hosted Payment Page Add a secure payment page to a merchant’s website. Payment Links Generate and send URLs to collect payments from customers.",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/take-payments/online-payments/hosted-payment-page",
      "type": "guide",
      "title": "Hosted Payment Page",
      "description": "Overview of Hosted Payment Page as a low-code online payment solution for merchants who want a secure, Payroc-hosted checkout page without handling sensitive payment data.",
      "headings": [
        "Key capabilities",
        "How to use our Hosted Payment Page",
        "API integration",
        "Self-Care Portal",
        "You might also be interested in...",
        "Payroc API",
        "Hosted Fields",
        "Payment Links"
      ],
      "plainText": "Our Hosted Payment Page solution allows merchants to easily add a secure payment page to their website, enabling customers to enter their payment details safely. Because we host the page, we handle the customer's sensitive payment information, significantly reducing the merchant’s PCI compliance obligations. Our Hosted Payment Page solution is a low-code option for businesses that want to accept online payments without the complexity of handling sensitive payment data. Key capabilities Simple, low-effort integration Eliminate the need to build or maintain your own payment form. Reduce the merchant's PCI scope by relying on us to handle all sensitive payment data. Flexible payment capabilities Accept card payments or bank transfer payments. Support one-time payments, pre-authorizations, delayed captures, and subscription billing. Use tokenization for recurring and merchant-initiated transactions. Take advantage of built-in security tools like 3-D Secure and AVS. Customizable, scalable checkout experience Present a clean and responsive UI across desktop, tablet, and mobile devices. Customize the checkout process for your customers for a seamless experience. How to use our Hosted Payment Page There are two ways to use our Hosted Payment Page: Integrate with our API. Use our Self-Care Portal. API integration Integrate with our low-code Hosted Payment Page methods to add a payment page to a merchant's website. For detailed integration steps, go to our integration guide for Hosted Payment Page. To perform follow-on actions, such as refunds, integrate with our other Payments methods. For more information about our Payroc API and other follow-on actions, go to our API Explorer. Self-Care Portal You can create a Hosted Payment Page on our Self-Care Portal. For more information about how to use the Self-Care Portal to create a Hosted Payment Page, contact us. You might also be interested in... Payroc API Offer a full payment acceptance solution with broad capabilities. Hosted",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/take-payments/online-payments/payment-links",
      "type": "guide",
      "title": "Payment Links",
      "description": "Overview of Payment Links as a solution for merchants to create and share secure payment links without needing a website or checkout integration.",
      "headings": [
        "Key capabilities",
        "How to use Payment Links",
        "API Integration",
        "Self-Care Portal",
        "You might also be interested in...",
        "Payroc API",
        "Hosted Fields",
        "Hosted Payment Page"
      ],
      "plainText": "Our Payment Links solution allows a merchant to create a shareable link that directs a customer to a secure hosted payment page. The customer selects the link, completes the payment, and the merchant receives the funds — no website or checkout integration needed. Payment links are ideal for a wide range of use cases, including invoices, donations, one-off purchases, bill payments, and any scenario where businesses need to request and receive payments quickly and reliably. Payment Links solution image Key capabilities On-demand link creation Generate payment links on demand. Share links through the merchant’s preferred channel. Use our API or Self-Care Portal interchangeably. Flexible configuration Create one-time links or reusable links. Choose between a sale transaction or pre-authorization transaction. Set up a fixed amount or allow the customer to enter the amount. Accept card payments, bank transfer, or both. Secure payment processing Redirect customers to a PCI-compliant payment page to make payments. Limit the merchant's PCI scope as no merchant website is needed. Tracking and reporting View payment statuses to check if the payment is completed or failed. Access reporting for reconciliation and activity monitoring. Manage links and follow-on actions from either the API or Self-Care Portal. How to use Payment Links There are two ways to use Payment Links: Integrate with our API. Use our Self-Care Portal. Both options provide the same capabilities to create, share, and manage payment links. They also use the same payment link data, so you can create a payment link with one option, and then share the payment link with the other option. API Integration Integrate with our low-code Payment Links endpoints to create payment links and share them. For detailed integration steps, go to our integration guide for Payment Links. To perform follow-on actions, such as refunds, integrate with our other Payments methods. For more information about our Payroc API and other foll",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/take-payments/online-payments/payroc-api",
      "type": "guide",
      "title": "Payroc API for online payments",
      "description": "Overview of the Payroc API as a fully flexible online payment solution supporting cards, bank transfers, digital wallets, tokenization, and recurring payments.",
      "headings": [
        "Key capabilities",
        "How to use the Payroc API",
        "You might also be interested in...",
        "Hosted Fields",
        "Hosted Payment Page",
        "Payroc API for in-person payments",
        "Payment Links"
      ],
      "plainText": "Use our powerful API to manage the complete online payment experience for your merchants. Pick and choose from our comprehensive suite of features and methods to create a bespoke solution for online payments. Our Payroc API is ideal if you want to have full control over the payment flow that you want to offer. API solution image Key capabilities Maximum flexibility Process all types of transactions, including sales, pre-authorizations, captures, refunds, and reversals. Design a fully custom checkout page for maximum control or use payment links to reduce development effort. Accept multiple payment methods, including card, bank transfers, and digital wallets. Advanced fraud prevention Use 3-D Secure, AVS, and CVV checks to rigorously verify customer identity and reduce fraud. Validate payment details without running a transaction to reduce unnecessary processing fees and errors. Rely on our built-in encryption tools for every transaction to meet security standards with zero effort. Powerful features Offer surcharging options to offset the merchant's processing fees. Run reports to gain immediate, actionable insights for your merchants. Accept specialized cards like EBT SNAP and various healthcare cards. Create payment schedules that tell us when to take money from customers. Save payment details using tokenization to improve the checkout flow and reduce your merchants' PCI burden when running regular payments. Speed to market Lean on our experts for ongoing support and advice to get the most out of your solution. Follow our comprehensive guides to streamline your development process. How to use the Payroc API Follow our comprehensive guides to quickly launch your integration. Our guides cover the basic functions of the API, including: Run sales and refunds. Save a customer's payment details. Verify a customer's payment details. Schedule repeat payments. You might also be interested in... Hosted Fields Add secure payment fields directly into a merchant's checkout page",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/view-reports",
      "type": "guide",
      "title": "View reports",
      "description": "View transaction and settlement information.",
      "headings": [],
      "plainText": "View transaction and settlement information. Real-time transaction data Settlement data",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/view-reports/real-time-transaction-data",
      "type": "guide",
      "title": "Real-time transaction data",
      "description": "Overview of tools for accessing real-time merchant transaction data, including sales, refunds, pre-authorizations, and captures via the Payroc API or Self-Care Portal.",
      "headings": [
        "Different reporting tools",
        "Key capabilities of our Payroc API",
        "Key capabilities of the Self-Care Portal",
        "How to use our reporting tools",
        "You might also be interested in...",
        "Settlement data"
      ],
      "plainText": "Our reporting tools give you access to your merchants' real-time transaction data, including sales, refunds, pre-authorizations, and captures. To view real-time transaction data, you can integrate with our Payroc API or use our Self-Care Portal. Different reporting tools Aspect Payroc API Self-Care Portal Ideal for Partners and ISVs who want to integrate reporting and analytics directly into their software. Partners and merchants who want to access reporting through a separate self-service interface. Speed of setup Moderate - Requires some development effort. Fast – Transaction data is ready to view. Scalability High – Handle reporting for multiple merchants and large datasets with ease. Moderate – Suitable for day-to-day reporting for one or several merchant accounts. Customization High – Fully customizable to your internal workflows and data needs. Low – Preconfigured reports for quick and easy access to key insights. Key capabilities of our Payroc API Seamless integration Integrate reporting directly into your software for an uninterrupted user experience. Automate data retrieval and synchronization to reduce manual tasks. Scalability Scale reporting effortlessly as your merchant base expands. Handle large volumes of data without significant manual effort. Custom reporting Tailor reports to include the data that matters most to your merchants. Provide customizable reporting interfaces that perfectly match your merchants' unique branding. Key capabilities of the Self-Care Portal On-demand reporting Access transaction data quickly without any integration or setup. Generate recurring reports for past transactions to streamline workflows. User-friendly interface View and manage all transactions in one centralized hub. Export reports easily for sharing or compliance purposes. Risk management Detect failed or declined transactions immediately to reduce financial losses. Monitor unusual transaction patterns in real time to prevent fraud. How to use our reporting tools C",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/solutions/full-stack/view-reports/settlement-data",
      "type": "guide",
      "title": "Settlement data",
      "description": "Overview of tools for accessing and reconciling merchants' settled transaction data using the Payroc API or Payroc Insights reporting portal.",
      "headings": [
        "Different reporting tools",
        "Key capabilities of our Payroc API",
        "Key capabilities of Payroc Insights",
        "How to use our reporting tools",
        "You might also be interested in...",
        "Real-time transaction data"
      ],
      "plainText": "Our reporting tools give you access to merchants’ settled transactions, which you can use to reconcile transactions and verify that merchants have received the correct funds. To view settlement data, you can integrate with our Payroc API or use Payroc Insights. Different reporting tools Aspect Payroc API Self-Care Portal Ideal for Partners and ISVs who want to integrate reporting and analytics directly into their software. Partners and merchants who want to access reporting through a separate self-service interface. Speed of setup Moderate - Requires some development effort. Fast – Settlement data is ready to view. Scalability High – Handle reporting for multiple merchants and large datasets with ease. Moderate – Suitable for day-to-day reporting for one or several merchant accounts. Customization High – Fully customizable to your internal workflows and data needs. Low – Preconfigured reports for quick and easy access to key insights. Key capabilities of our Payroc API Seamless integration Integrate reporting directly into your software for an uninterrupted user experience. Automate data retrieval and synchronization to reduce manual tasks. Scalability Scale reporting effortlessly as your merchant base expands. Handle large volumes of data without significant manual effort. Custom reporting Tailor reports to include the data that matters most to your merchants. Provide customizable reporting interfaces that perfectly match your merchants' unique branding. Key capabilities of Payroc Insights On-demand reporting Access settlement reports on time without any integration or setup. Review monthly statements to understand fees and account activity. User-friendly interface Use the dashboard to gain a high-level overview of your transactions and merchants. Highlight key metrics easily with the intuitive dashboard filters. Automated notifications Stay informed with updates on merchant accounts, chargebacks , statements, and PCI compliance status. Schedule notifications for t",
      "refs": {
        "workflowIds": [],
        "operationIds": []
      }
    },
    {
      "route": "/workflows/accept-apple-pay",
      "type": "workflow",
      "title": "Validate an Apple Pay merchant session, then run a sale with the wallet token.",
      "description": "Validate an Apple Pay merchant session, then run a sale with the wallet token.",
      "headings": [
        "registerApplePayDomain",
        "startApplePaySession",
        "authorizeWithApplePay",
        "runApplePaySale"
      ],
      "plainText": "Validate an Apple Pay merchant session, then run a sale with the wallet token. PREREQUISITE, done once: the merchant's domain is registered for Apple Pay in the Self-Care Portal, which issues the appleDomainId input used by startApplePaySession . There is no API operation for this; it is an external-system step supplying an input. OPTIONAL — web flow only. Start and validate the Apple Pay merchant session by POSTing the appleDomainId and appleValidationUrl to the apple-pay-sessions endpoint. The returned startSessionResponse is passed to the Apple Pay JS API in the browser so Apple releases the cardholder's encrypted payment data. Skip this step for the in-app (native PassKit) flow, where the app obtains the token directly from Apple. The browser hands the startSessionResponse to the Apple Pay JS API (web flow) at the validation URL supplied by the appleValidationUrl input; the cardholder authorizes the charge in Apple Pay on their device, and Apple releases the encrypted payment data used by runApplePaySale . In the in-app (native PassKit) variant, the app obtains this token directly from Apple, skipping startApplePaySession . Run the sale with the Apple Pay wallet data by POSTing to /payments. The payment method is a digital wallet: type: digitalWallet , serviceProvider: apple , and encryptedData set to Apple's encrypted payment data in hexadecimal. This is the same operation as a card sale, only the paymentMethod differs. The default autoCapture: true runs a normal sale that stays adjustable in the open batch.",
      "refs": {
        "workflowIds": [
          "accept-apple-pay"
        ],
        "operationIds": [
          "applePaySessions",
          "payment"
        ]
      }
    },
    {
      "route": "/workflows/accept-google-pay",
      "type": "workflow",
      "title": "Run a sale using an encrypted Google Pay token.",
      "description": "Run a sale using an encrypted Google Pay token.",
      "headings": [
        "authorizeWithGooglePay",
        "runGooglePaySale"
      ],
      "plainText": "Run a sale using an encrypted Google Pay token. The customer authorizes the payment through Google Pay, and the client (web page or mobile app) obtains the customer's encrypted payment details from the Google Pay API and converts them to hexadecimal - there is no dedicated Payroc session or tokenization call for Google Pay. The web and in-app variants differ only in how the client acquires this token client-side; both feed the identical payment request in the next step. Run and capture a sale funded by Google Pay. Sends paymentMethod.type digitalWallet with serviceProvider google and the hex-encoded encryptedData token. autoCapture defaults to true (a sale); send false only to run a pre-authorization and capture later. The same request serves both the web and in-app variants.",
      "refs": {
        "workflowIds": [
          "accept-google-pay"
        ],
        "operationIds": [
          "payment"
        ]
      }
    },
    {
      "route": "/workflows/add-attachment",
      "type": "workflow",
      "title": "Upload a document to a processing account, then optionally retrieve it.",
      "description": "Upload a document to a processing account, then optionally retrieve it.",
      "headings": [
        "uploadAttachment",
        "getAttachment"
      ],
      "plainText": "Upload a document to a processing account, then optionally retrieve it. Upload the document to the processing account. The request is multipart/form-data (NOT application/json): the attachment object carries the type/description/metadata and the binary file carries the document. Returns a 201 with the attachmentId and an initial uploadStatus of pending . OPTIONAL — retrieve the attachment by its id to confirm the upload status (expect uploadStatus to become accepted ). Returns metadata about the file, not the file bytes.",
      "refs": {
        "workflowIds": [
          "add-attachment"
        ],
        "operationIds": [
          "createProcessingAccountAttachment",
          "getAttachment"
        ]
      }
    },
    {
      "route": "/workflows/add-processing-account",
      "type": "workflow",
      "title": "Create a processing account on a merchant platform, then optionally remind the merchant to sign.",
      "description": "Create a processing account on a merchant platform, then optionally remind the merchant to sign.",
      "headings": [
        "createProcessingAccount",
        "createReminder",
        "signPricingAgreement",
        "accountReview"
      ],
      "plainText": "Create a processing account on a merchant platform, then optionally remind the merchant to sign. Create the processing account on the merchant platform. Owners and contacts are supplied inline (no separate create operations exist). Exactly one owner is marked as the control prong. signature.type is requestedViaEmail here so the optional reminder step is available; use requestedViaDirectLink instead if you generate a signing link (and skip Step 2). Returns 201 with a top-level processingAccountId and status \"entered\". OPTIONAL — prompt the merchant to sign the pricing agreement by sending another email. Only valid when Step 1 used signature.type: requestedViaEmail; skip this step if the signature was requested via a direct link, if the contract is already signed, or if no pricing agreement exists. Returns 201. The merchant signs the pricing agreement out of band via the signature email sent when the processing account was created (or via the direct link when Step 1 used signature.type requestedViaDirectLink). Not a Payroc REST operation; the optional reminder step above only re-sends the signature email. Payroc reviews the processing account after creation - the create call returns it in status \"entered\" while the review runs. External, non-API step: observe the status transitions via the processingAccount.status.changed event delivered to your subscribed webhook endpoint.",
      "refs": {
        "workflowIds": [
          "add-processing-account"
        ],
        "operationIds": [
          "createProcessingAccount",
          "createReminder"
        ]
      }
    },
    {
      "route": "/workflows/adjust-a-payment",
      "type": "workflow",
      "title": "List payments, retrieve the target payment, then adjust it",
      "description": "List payments, retrieve the target payment, then adjust it",
      "headings": [
        "listPayments",
        "getPayment",
        "adjustPayment"
      ],
      "plainText": "List payments, retrieve the target payment, then adjust it List payments filtered by terminal, status, and date. The response is paginated — payments are in the data array. This step extracts the first payment's paymentId for the follow-on steps. Retrieve the full detail of the first payment from the list. Inspect the returned supportedOperations to confirm the payment can be adjusted before calling the adjust step. Adjust the payment using the paymentId from the retrieve step. The body is an adjustments array of polymorphic objects — choose the right type discriminator: order — change the sale amount and/or tip breakdown (primary path). status — move the transaction to ready or pending via toStatus . customer — update shippingAddress and/or contactMethods . signature — attach cardholderSignature (cannot be adjusted once set). Requires a unique Idempotency-Key header. Returns 200.",
      "refs": {
        "workflowIds": [
          "adjust-a-payment"
        ],
        "operationIds": [
          "listPayments",
          "getPayment",
          "adjustPayment"
        ]
      }
    },
    {
      "route": "/workflows/adjust-a-refund",
      "type": "workflow",
      "title": "List, retrieve, then adjust a card refund.",
      "description": "List, retrieve, then adjust a card refund.",
      "headings": [
        "listRefunds",
        "getRefund",
        "adjustRefund"
      ],
      "plainText": "List, retrieve, then adjust a card refund. OPTIONAL — list card refunds filtered by terminal, order, status, and date. The response is paginated - refunds are in the data array. This step extracts the first refund's refundId for the follow-on steps. OPTIONAL — retrieve the full detail of the first card refund from the list. Inspect supportedOperations and transactionResult.status to confirm the refund can be adjusted before acting. Adjust the refund in an open batch using the refundId from getRefund. The body is a polymorphic adjustments array discriminated by type : status (move to ready / pending via toStatus ) or customer (update contact methods / shipping address). Requires a unique Idempotency-Key header. Returns 200.",
      "refs": {
        "workflowIds": [
          "adjust-a-refund"
        ],
        "operationIds": [
          "listRefunds",
          "getRefund",
          "adjustRefund"
        ]
      }
    },
    {
      "route": "/workflows/board-a-merchant",
      "type": "workflow",
      "title": "Create pricing, board the merchant platform, add accounts/terminals, and upload documents.",
      "description": "Create pricing, board the merchant platform, add accounts/terminals, and upload documents.",
      "headings": [
        "pricingIntent",
        "merchantPlatform",
        "signPricingAgreement",
        "additionalProcessingAccount",
        "terminalOrder",
        "supportingDocument",
        "underwritingApproval"
      ],
      "plainText": "Create pricing, board the merchant platform, add accounts/terminals, and upload documents. OPTIONAL — sub-workflow create-pricing-intent: build the reusable fee template. Skip this step and supply an inline pricing agreement in the create-merchant payload instead. Captures pricingIntentId for step 2. Sub-workflow create-merchant-platform: board the business and its first processing account (owners and contacts inline), applying the pricing intent from step 1. Returns merchantPlatformId and processingAccountId used by the later steps. The merchant signs the pricing agreement out of band via the email or direct link issued at boarding (see create-merchant-platform); the API-side signing operation (submitSignedProcessingAgreement) is x-internal and deliberately not modeled as a step here. OPTIONAL — sub-workflow add-processing-account: add a further processing account to the merchant platform created in step 2. Run this only for a business that operates more than one account; the create-merchant call already boarded the first one. Sub-workflow order-a-terminal: order a physical terminal for the processing account boarded in step 2. Returns a terminalOrderId that fulfills asynchronously. OPTIONAL, repeatable — sub-workflow add-attachment: upload a supporting document (for example personal identification or banking evidence) to the processing account boarded in step 2. One attachment per invocation. Payroc underwriting reviews and approves the boarded account before it can process. This is an external, non-API step; the integrator observes the outcome via the processingAccount.status.changed event delivered to its subscribed webhook (see create-event-subscription).",
      "refs": {
        "workflowIds": [
          "board-a-merchant"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/workflows/cancel-a-device-payment-instruction",
      "type": "workflow",
      "title": "Confirm an instruction is in progress, then cancel it.",
      "description": "Confirm an instruction is in progress, then cancel it.",
      "headings": [
        "getPaymentInstruction",
        "cancelPaymentInstruction"
      ],
      "plainText": "Confirm an instruction is in progress, then cancel it. OPTIONAL — confirm the instruction is still inProgress before canceling, via GET /payment-instructions/{paymentInstructionId}. Cancel is only allowed while the status is inProgress . Cancel the payment instruction via DELETE /payment-instructions/{paymentInstructionId}. Valid only while the instruction's status is inProgress . Returns HTTP 204 with no body.",
      "refs": {
        "workflowIds": [
          "cancel-a-device-payment-instruction"
        ],
        "operationIds": [
          "getPaymentInstruction",
          "deletePaymentInstruction"
        ]
      }
    },
    {
      "route": "/workflows/cancel-a-device-refund-instruction",
      "type": "workflow",
      "title": "Confirm an instruction is in progress, then cancel it.",
      "description": "Confirm an instruction is in progress, then cancel it.",
      "headings": [
        "getRefundInstruction",
        "deleteRefundInstruction"
      ],
      "plainText": "Confirm an instruction is in progress, then cancel it. OPTIONAL — confirm the instruction is still inProgress before canceling, via GET /refund-instructions/{refundInstructionId}. Cancel is only allowed while the status is inProgress . Cancel the refund instruction via DELETE /refund-instructions/{refundInstructionId}. Allowed only while the instruction's status is inProgress ; returns HTTP 204.",
      "refs": {
        "workflowIds": [
          "cancel-a-device-refund-instruction"
        ],
        "operationIds": [
          "getRefundInstruction",
          "deleteRefundInstruction"
        ]
      }
    },
    {
      "route": "/workflows/cancel-a-device-signature-instruction",
      "type": "workflow",
      "title": "Confirm a signature instruction is still pending, then cancel it.",
      "description": "Confirm a signature instruction is still pending, then cancel it.",
      "headings": [
        "getSignatureInstruction",
        "cancelSignatureInstruction"
      ],
      "plainText": "Confirm a signature instruction is still pending, then cancel it. OPTIONAL — confirm the instruction is still inProgress before canceling, via GET /signature-instructions/{signatureInstructionId}. Cancel is only allowed while the status is inProgress . Cancel the signature instruction via DELETE /signature-instructions/{signatureInstructionId}. Valid only while the instruction's status is inProgress . Returns HTTP 204 with no body.",
      "refs": {
        "workflowIds": [
          "cancel-a-device-signature-instruction"
        ],
        "operationIds": [
          "getSignatureInstruction",
          "deleteSignatureInstruction"
        ]
      }
    },
    {
      "route": "/workflows/capture-signature-on-a-device",
      "type": "workflow",
      "title": "Submit a signature instruction to a device, then retrieve the captured signature.",
      "description": "Submit a signature instruction to a device, then retrieve the captured signature.",
      "headings": [
        "submitSignatureInstruction",
        "getSignatureInstruction",
        "retrieveSignature"
      ],
      "plainText": "Submit a signature instruction to a device, then retrieve the captured signature. Submit an instruction to capture a signature on the device identified by serialNumber in the path; the target terminal is sent as processingTerminalId in the body. Requires a UUID v4 Idempotency-Key header. The gateway returns 202 with a signatureInstructionId and an initial status of inProgress ; the device then prompts the customer to sign. Retrieve the signature instruction by its signatureInstructionId . Poll this step until status is completed (it stays inProgress while the customer is signing; failure or canceled means no signature). The completed response includes a link whose href ends with the signatureId needed for the next step. The signature itself is produced by the customer on the device between submit and this poll. Retrieve the captured signature by its signatureId (the final path segment of the signatureLink from the previous step). Returns 200 with the Base64-encoded image in signature , its contentType (for example image/png), and the createdOn capture date, linked to the processingTerminalId .",
      "refs": {
        "workflowIds": [
          "capture-signature-on-a-device"
        ],
        "operationIds": [
          "sendSignatureInstruction",
          "getSignatureInstruction",
          "retrieveSignature"
        ]
      }
    },
    {
      "route": "/workflows/check-dcc-eligibility",
      "type": "workflow",
      "title": "Verify DCC eligibility and retrieve a currency conversion quote for a card.",
      "description": "Verify DCC eligibility and retrieve a currency conversion quote for a card.",
      "headings": [
        "getFxRates"
      ],
      "plainText": "Verify DCC eligibility and retrieve a currency conversion quote for a card. Submit the DCC eligibility inquiry. Success is a 200 regardless of the eligibility outcome; branch on inquiryResult.dccOffered . When true, the response includes a dccOffer with the quote fields needed for a subsequent DCC-enabled sale or unreferenced refund.",
      "refs": {
        "workflowIds": [
          "check-dcc-eligibility"
        ],
        "operationIds": [
          "getFxRates"
        ]
      }
    },
    {
      "route": "/workflows/check-ebt-balance",
      "type": "workflow",
      "title": "Submit an EBT balance inquiry and return the card's benefit balance.",
      "description": "Submit an EBT balance inquiry and return the card's benefit balance.",
      "headings": [
        "balanceInquiry"
      ],
      "plainText": "Submit an EBT balance inquiry and return the card's benefit balance. Submit the EBT balance inquiry. The card is sent as raw keyed card details ( card.type == card ); to query by token instead, send a singleUseToken variant of the polymorphic card object. The gateway returns 200 even on a decline, so successCriteria also asserts responseCode == A to confirm the processor approved the inquiry.",
      "refs": {
        "workflowIds": [
          "check-ebt-balance"
        ],
        "operationIds": [
          "balanceCard"
        ]
      }
    },
    {
      "route": "/workflows/close-a-terminal-batch",
      "type": "workflow",
      "title": "Close the current batch for a processing terminal.",
      "description": "Close the current batch for a processing terminal.",
      "headings": [
        "closeBatch"
      ],
      "plainText": "Close the current batch for a processing terminal. Manually close the open batch on the processing terminal. No request body is sent; the terminal is identified by the path parameter and the request is made idempotent by the Idempotency-Key header (a missing header returns 400). The gateway returns 202 with the cut-off time and time zone at which it closes the batch.",
      "refs": {
        "workflowIds": [
          "close-a-terminal-batch"
        ],
        "operationIds": [
          "closeBatch"
        ]
      }
    },
    {
      "route": "/workflows/close-ach-return",
      "type": "workflow",
      "title": "Retrieve a returned ACH payment, then close the return.",
      "description": "Retrieve a returned ACH payment, then close the return.",
      "headings": [
        "retrievePayment",
        "closeReturn"
      ],
      "plainText": "Retrieve a returned ACH payment, then close the return. Retrieve the original bank transfer payment by its paymentId so the return's own paymentId can be read. The response returns array holds one entry per return, each with its own paymentId, returnCode and returnReason. Capture returns/0/paymentId - that is the id required to close the return, NOT the top-level paymentId. Close the return permanently. Takes the return's paymentId in the path (from the previous step's returnPaymentId, i.e. returns/0/paymentId - not the original payment's id) and a required Idempotency-Key header. This endpoint has no request body. Success returns the bank transfer payment.",
      "refs": {
        "workflowIds": [
          "close-ach-return"
        ],
        "operationIds": [
          "getBankTransferPayment",
          "closeBankTransferPayment"
        ]
      }
    },
    {
      "route": "/workflows/collect-with-hosted-fields",
      "type": "workflow",
      "title": "Create a Hosted Fields session, tokenize card details client-side, then run the sale.",
      "description": "Create a Hosted Fields session, tokenize card details client-side, then run the sale.",
      "headings": [
        "createHostedFieldsSession",
        "customerSubmitsPaymentDetails",
        "runSaleWithToken"
      ],
      "plainText": "Create a Hosted Fields session, tokenize card details client-side, then run the sale. Create a Hosted Fields session for the terminal by POSTing to /processing-terminals/{processingTerminalId}/hosted-fields-sessions with scenario payment . The returned session token (expires after 10 minutes) is placed in the Hosted Fields JavaScript config in the browser. Requires an Idempotency-Key header and the libVersion. OFF-API, client-side: the Hosted Fields JavaScript library renders the embedded fields using the session token from the previous step, the customer submits their card or bank details, and the client receives a single-use token in a submissionSuccess event. The token is single-use and expires ~30 minutes after issue; it is the singleUseToken input consumed by the next step. Run the sale server-side by POSTing to /payments with paymentMethod.type = singleUseToken and the single-use token the client received from the submissionSuccess event. The default autoCapture: true / processAsSale: false produce a normal, adjustable sale. To save the card at the same time, add a credentialOnFile object with tokenize: true . Requires an Idempotency-Key header. Terminal outcome: a created payment with a paymentId and transactionResult.",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-fields"
        ],
        "operationIds": [
          "createSession",
          "payment"
        ]
      }
    },
    {
      "route": "/workflows/collect-with-hosted-payment-page",
      "type": "workflow",
      "title": "Collect a payment via Payroc's redirect-based Hosted Payment Page, optionally capturing a pre-authorization afterward.",
      "description": "Collect a payment via Payroc's redirect-based Hosted Payment Page, optionally capturing a pre-authorization afterward.",
      "headings": [
        "loadHostedPaymentPage",
        "customerSubmitsPaymentDetails",
        "receivePaymentResult",
        "captureHostedPreAuthorization"
      ],
      "plainText": "Collect a payment via Payroc's redirect-based Hosted Payment Page, optionally capturing a pre-authorization afterward. The merchant's website sends the authenticated, signed form POST that redirects the customer's browser to Payroc's Hosted Payment Page - not a documented Payroc REST operationId. This is the load-the-page step: a signed form POST/redirect to the gateway's hosted checkout. The customer submits their payment details on the Payroc-hosted page; the gateway processes the transaction with the processor. The HPP request configures which variant runs here: a plain sale (default, no further step required), a pre-authorization to be captured afterward by captureHostedPreAuthorization, or tokenizing the card to save the customer's payment details for repeat payments. The gateway returns the transaction result to the merchant's receipt/return URL and delivers it by webhook. This is where the merchant obtains the paymentId used by the optional capture step; the gateway returns it to the merchant's return URL and via webhook after the customer completes the HPP - it is not obtained from a REST call in this workflow. OPTIONAL - pre-authorization variant only. After the customer completes the Hosted Payment Page as a pre-authorization, capture the held funds server-side using the paymentId returned to the merchant's return URL / webhook. Sending an amount captures that value; omit amount to capture the full authorized amount. For a plain sale, skip this step - the redirect and webhook already settled the payment. Returns the payment with transactionResult.status reflecting the capture.",
      "refs": {
        "workflowIds": [
          "collect-with-hosted-payment-page"
        ],
        "operationIds": [
          "capturePayment"
        ]
      }
    },
    {
      "route": "/workflows/collect-with-payment-link",
      "type": "workflow",
      "title": "Create a payment link, share it by email, track sharing events, and manage its lifecycle.",
      "description": "Create a payment link, share it by email, track sharing events, and manage its lifecycle.",
      "headings": [
        "createPaymentLink",
        "sharePaymentLink",
        "listSharingEvents",
        "customerPaysThroughLink",
        "retrievePaymentLink",
        "updatePaymentLink",
        "listPaymentLinks",
        "deactivatePaymentLink"
      ],
      "plainText": "Create a payment link, share it by email, track sharing events, and manage its lifecycle. Create the payment link on the processing terminal. Primary path: a reusable multiUse link where the customer enters the amount (order.charge.type = prompt). For a one-off link send type = singleUse with an order.orderId and expiresOn, and use charge.type = preset with an amount to fix the price. Save the returned paymentLinkId - every follow-on step needs it - and the assets.paymentUrl to share manually. Email the payment link to the customer. Requires the paymentLinkId from step 1. Send sharingMethod = email plus a recipients array (name and email are required); set merchantCopy = true to also send the merchant a copy. Returns a sharingEventId used to track this send. List the sharing events for the payment link to confirm and track when and to whom it was sent. Paginated; filter by recipientName or recipientEmail. Keyed by paymentLinkId. The customer pays through the hosted payment link - the assets.paymentUrl created in step 1, delivered by the email share. This happens outside these API steps, on the Payroc-hosted page. For a singleUse link the link moves to completed after the single payment; the optional retrievePaymentLink step is how the merchant checks whether the customer has paid. OPTIONAL — retrieve the current state of the payment link by paymentLinkId - for example to check whether the customer has paid (status = completed). Returns the same polymorphic link object as create. OPTIONAL lifecycle update. Partially update the payment link with an RFC 6902 JSON Patch document - the body is an ARRAY of patch operations, not a full resource. This example replaces the expiry date. Note: updating a single-use link regenerates its payment URL, invalidating the original. OPTIONAL — list the payment links on the processing terminal, for example to find a link when you don't have its paymentLinkId. Paginated; filter by merchantReference, linkType, chargeType, status, recipie",
      "refs": {
        "workflowIds": [
          "collect-with-payment-link"
        ],
        "operationIds": [
          "createPaymentLink",
          "sharePaymentLink",
          "listPaymentLinkShareEvents",
          "retrievePaymentLink",
          "updatePaymentLink",
          "listPaymentLinks",
          "deactivatePaymentLink"
        ]
      }
    },
    {
      "route": "/workflows/configure-a-device",
      "type": "workflow",
      "title": "Retrieve terminal, host, and device configuration for a Payroc Cloud device.",
      "description": "Retrieve terminal, host, and device configuration for a Payroc Cloud device.",
      "headings": [
        "getProcessingTerminal",
        "getProcessingTerminalHostConfiguration",
        "retrieveDeviceConfiguration"
      ],
      "plainText": "Retrieve terminal, host, and device configuration for a Payroc Cloud device. Retrieve the processing terminal: its active/inactive status, gateway and application settings, features, receipt and security settings, and the devices that use the terminal's configuration. Only terminals whose terminal order was created via the Payroc API can be retrieved. OPTIONAL — retrieve the host processor configuration (merchant and terminal settings such as posMid, chainNumber, terminalId, and sharing groups). Integrate with this step only if you use your own gateway and want to validate the processor configuration. Retrieve the configuration for a specific device model on the terminal: supported features, applications, EMV certificates and revoked certificates, and visual assets. The model path parameter selects the device family — pass the value for the ID TECH, Ingenico, or Android/PAX device you are configuring (the terminal's devices array from step 1 lists the models bound to this terminal).",
      "refs": {
        "workflowIds": [
          "configure-a-device"
        ],
        "operationIds": [
          "getProcessingTerminal",
          "getProcessingTerminalHostConfiguration",
          "retrieveDeviceConfiguration"
        ]
      }
    },
    {
      "route": "/workflows/create-event-subscription",
      "type": "workflow",
      "title": "Create an event subscription, then discover, retrieve, and delete it.",
      "description": "Create an event subscription, then discover, retrieve, and delete it.",
      "headings": [
        "createSubscription",
        "deliverEventNotification",
        "listSubscriptions",
        "getSubscription",
        "deleteSubscription"
      ],
      "plainText": "Create an event subscription, then discover, retrieve, and delete it. Create the event subscription. Sends the events to subscribe to plus the webhook notification target. Returns the subscriptionId at #/id, which every management step below reuses. When a subscribed event occurs, Payroc sends a webhook POST carrying the CloudEvents payload to the notificationUri registered in step 1. The receiver is caller-side and not a Payroc API operation: verify the Payroc-Secret header against your copy of the secret and return a 200 to each delivery. OPTIONAL — list event subscriptions, optionally filtered by status or event type, to find a subscriptionId when you did not retain the one from create. Retrieve the full details of the subscription created above. OPTIONAL — delete the subscription. This is irreversible and stops all notifications from it. To pause notifications without deleting, patch the subscription and set enabled to false instead (see patch-an-event-subscription). Returns 204 No Content.",
      "refs": {
        "workflowIds": [
          "create-event-subscription"
        ],
        "operationIds": [
          "createEventSubscription",
          "listEventSubscriptions",
          "getEventSubscription",
          "deleteEventSubscription"
        ]
      }
    },
    {
      "route": "/workflows/create-merchant-platform",
      "type": "workflow",
      "title": "Create a merchant platform, then optionally remind the merchant to sign.",
      "description": "Create a merchant platform, then optionally remind the merchant to sign.",
      "headings": [
        "createMerchant",
        "createReminder",
        "signPricingAgreement"
      ],
      "plainText": "Create a merchant platform, then optionally remind the merchant to sign. Board the business — send the legal business details plus a nested processingAccounts array; each processing account nests its owners (one flagged isControlProng) and contacts inline. Returns the merchantPlatformId and, for each processing account, a processingAccountId. OPTIONAL — re-send the pricing-agreement signature email for the processing account created in step 1. Only valid when that account's signature was requested by email (requestedViaEmail); returns 400 if the signature was requested via direct link, if no pricing agreement exists, or if the merchant has already signed. The merchant signs the pricing agreement out of band via the signature email sent at boarding (each processing account here uses signature.type requestedViaEmail; a direct-link signature is signed via its link instead). Not a Payroc REST operation; the optional reminder step above only re-sends the signature email.",
      "refs": {
        "workflowIds": [
          "create-merchant-platform"
        ],
        "operationIds": [
          "createMerchant",
          "createReminder"
        ]
      }
    },
    {
      "route": "/workflows/create-pricing-intent",
      "type": "workflow",
      "title": "Create a reusable pricing intent (fee template) for processing accounts.",
      "description": "Create a reusable pricing intent (fee template) for processing accounts.",
      "headings": [
        "createPricingIntent"
      ],
      "plainText": "Create a reusable pricing intent (fee template) for processing accounts. Create the pricing intent. Sends base fees (required), processor card and ACH fees with the pricing program, and gateway fees. Returns 201 with the pricing intent in status pendingReview.",
      "refs": {
        "workflowIds": [
          "create-pricing-intent"
        ],
        "operationIds": [
          "createPricingIntent"
        ]
      }
    },
    {
      "route": "/workflows/deactivate-a-subscription",
      "type": "workflow",
      "title": "Deactivate a subscription to stop collection.",
      "description": "Deactivate a subscription to stop collection.",
      "headings": [
        "deactivateSubscription"
      ],
      "plainText": "Deactivate a subscription to stop collection. Stops the gateway from taking further payments for the subscription. POST with no request body; returns 200.",
      "refs": {
        "workflowIds": [
          "deactivate-a-subscription"
        ],
        "operationIds": [
          "deactivateSubscription"
        ]
      }
    },
    {
      "route": "/workflows/delete-a-contact",
      "type": "workflow",
      "title": "List, retrieve, then delete a processing account's contact.",
      "description": "List, retrieve, then delete a processing account's contact.",
      "headings": [
        "listContacts",
        "getContact",
        "deleteContact"
      ],
      "plainText": "List, retrieve, then delete a processing account's contact. OPTIONAL — list the contacts associated with the processing account to discover the contactId. Supports before/after/limit cursor pagination. Skip if you already hold the contactId. OPTIONAL — retrieve the full details of the contact by its contactId before deleting it. Delete the contact from the processing account. Destructive and irreversible; run only when the contact should be removed. The API rejects this call if the contact is the last one on the processing account. Returns 204 No Content with no response body.",
      "refs": {
        "workflowIds": [
          "delete-a-contact"
        ],
        "operationIds": [
          "listProcessingAccountContacts",
          "getContact",
          "deleteContact"
        ]
      }
    },
    {
      "route": "/workflows/delete-a-funding-account",
      "type": "workflow",
      "title": "List, retrieve, then delete a funding account.",
      "description": "List, retrieve, then delete a funding account.",
      "headings": [
        "listFundingAccounts",
        "getFundingAccount",
        "deleteFundingAccount"
      ],
      "plainText": "List, retrieve, then delete a funding account. OPTIONAL — list the funding accounts on your account to discover a fundingAccountId. Returns a paginated envelope; accounts are under data . Skip if you already hold the fundingAccountId. OPTIONAL — retrieve the full detail of the funding account by its fundingAccountId before deleting. Delete the funding account. Valid only for a funding account associated with a funding recipient - the API rejects deletes of a processing-account funding account. The API also rejects this call if the account is the last one on the funding recipient. Returns 204 with no body. Run only when you intend to permanently remove the account.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-account"
        ],
        "operationIds": [
          "listFundingAccount",
          "getFundingAccount",
          "deleteFundingAccount"
        ]
      }
    },
    {
      "route": "/workflows/delete-a-funding-instruction",
      "type": "workflow",
      "title": "List, retrieve, then delete a funding instruction.",
      "description": "List, retrieve, then delete a funding instruction.",
      "headings": [
        "listInstructions",
        "getInstruction",
        "deleteInstruction"
      ],
      "plainText": "List, retrieve, then delete a funding instruction. OPTIONAL — list funding instructions sent within the required dateFrom / dateTo window, optionally paginated with before / after / limit . The response is paginated - instructions are in the data array. This step extracts the first instruction's integer instructionId for the follow-on steps. OPTIONAL — retrieve the full detail of the first funding instruction from the list. Inspect status ( accepted , pending , or completed ) to confirm the instruction can still be deleted - only an accepted instruction may be modified. instructionId is top-level here. Delete the funding instruction retrieved above, using its integer instructionId . Only works while status is accepted ; otherwise the gateway returns 409 (cannot be modified). This is a DELETE that returns 204 No Content - there is no response body to capture.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-instruction"
        ],
        "operationIds": [
          "listInstructions",
          "getInstruction",
          "deleteInstructions"
        ]
      }
    },
    {
      "route": "/workflows/delete-a-funding-recipient",
      "type": "workflow",
      "title": "List, retrieve, then delete a funding recipient.",
      "description": "List, retrieve, then delete a funding recipient.",
      "headings": [
        "listRecipients",
        "getRecipient",
        "deleteRecipient"
      ],
      "plainText": "List, retrieve, then delete a funding recipient. OPTIONAL — return a paginated list of funding recipients so the caller can find the target recipientId. Skip if the recipientId is already known. OPTIONAL — retrieve the target funding recipient to confirm it before deleting. Delete the funding recipient. This is destructive and cascades - it also removes the recipient's funding accounts and owners. Returns 204 No Content.",
      "refs": {
        "workflowIds": [
          "delete-a-funding-recipient"
        ],
        "operationIds": [
          "listFundingRecipients",
          "getFundingRecipient",
          "deleteFundingRecipient"
        ]
      }
    },
    {
      "route": "/workflows/delete-a-payment-plan",
      "type": "workflow",
      "title": "List, retrieve, then delete a payment plan.",
      "description": "List, retrieve, then delete a payment plan.",
      "headings": [
        "listPaymentPlans",
        "getPaymentPlan",
        "deletePaymentPlan"
      ],
      "plainText": "List, retrieve, then delete a payment plan. OPTIONAL — returns a paginated list of the terminal's payment plans and extracts the first result's paymentPlanId . Skip if you already hold the paymentPlanId . OPTIONAL — retrieve the payment plan to confirm its current state before deleting. Delete the payment plan — irreversible: the plan cannot be recovered and no further subscriptions can be added to it. The plan's onDelete value ( complete vs continue ) determines whether existing subscriptions stop or keep running. Returns 204 with no body.",
      "refs": {
        "workflowIds": [
          "delete-a-payment-plan"
        ],
        "operationIds": [
          "listPaymentPlans",
          "getPaymentPlan",
          "deletePaymentPlan"
        ]
      }
    },
    {
      "route": "/workflows/delete-a-saved-payment-method",
      "type": "workflow",
      "title": "List, retrieve, then delete a secure token.",
      "description": "List, retrieve, then delete a secure token.",
      "headings": [
        "listSecureTokens",
        "getSecureToken",
        "deleteSecureToken"
      ],
      "plainText": "List, retrieve, then delete a secure token. OPTIONAL — lists secure tokens on the terminal, filtered by customer name, and extracts the first result's secureTokenId . Skip if you already hold the secureTokenId . OPTIONAL — retrieve the secure token to confirm its current state before deleting. Delete the secure token and its stored payment details from the vault. Irreversible — the token and its secureTokenId cannot be recovered or reused. Returns 204 with no body.",
      "refs": {
        "workflowIds": [
          "delete-a-saved-payment-method"
        ],
        "operationIds": [
          "listSecureTokens",
          "getSecureToken",
          "deleteSecureToken"
        ]
      }
    },
    {
      "route": "/workflows/delete-an-owner",
      "type": "workflow",
      "title": "List, retrieve, then delete an owner of a funding recipient.",
      "description": "List, retrieve, then delete an owner of a funding recipient.",
      "headings": [
        "listOwners",
        "getOwner",
        "deleteOwner"
      ],
      "plainText": "List, retrieve, then delete an owner of a funding recipient. OPTIONAL — list the owners of the funding recipient to discover the numeric ownerId. Skip if you already hold the ownerId. OPTIONAL — retrieve the full details of a single owner before deleting. Delete an owner from the funding recipient — only valid there; the API rejects attempts against a processing account's owner (400). The API also rejects this call if the owner is the last one on the funding recipient. Returns no body on success.",
      "refs": {
        "workflowIds": [
          "delete-an-owner"
        ],
        "operationIds": [
          "listFundRecipientOwners",
          "getOwner",
          "deleteOwner"
        ]
      }
    },
    {
      "route": "/workflows/look-up-bin",
      "type": "workflow",
      "title": "Look up card details from a BIN.",
      "description": "Look up card details from a BIN.",
      "headings": [
        "lookUpBin"
      ],
      "plainText": "Look up card details from a BIN. Look up the card's details from its BIN. The primary path uses the cardBin payload (type cardBin + bin ). To check surcharge support, add amount and currency (both optional and omitted for a plain lookup). Alternatively, replace the card payload with a full card , secureToken , or digitalWallet object — the operation accepts any of these discriminated variants.",
      "refs": {
        "workflowIds": [
          "look-up-bin"
        ],
        "operationIds": [
          "binLookup"
        ]
      }
    },
    {
      "route": "/workflows/manage-funding-recipients",
      "type": "workflow",
      "title": "Discover a funding recipient, retrieve it, and read its nested accounts and owners.",
      "description": "Discover a funding recipient, retrieve it, and read its nested accounts and owners.",
      "headings": [
        "listRecipients",
        "getRecipient",
        "listRecipientFundingAccounts",
        "listRecipientOwners"
      ],
      "plainText": "Discover a funding recipient, retrieve it, and read its nested accounts and owners. OPTIONAL — return a paginated list of funding recipients linked to the account so the caller can find the target recipientId. Skip this step if the recipientId is already known. Retrieve the full detail of the target funding recipient by recipientId: legal information (taxId, doingBusinessAs), address, contact methods, and summaries of its linked owners and funding accounts. Return the funding accounts associated with the recipient: account holder name, ACH details, and status. Each entry carries a fundingAccountId for follow-on actions. Return the owners of the recipient: name, date of birth, address, contact details, and relationship. Each entry carries an ownerId for follow-on actions.",
      "refs": {
        "workflowIds": [
          "manage-funding-recipients"
        ],
        "operationIds": [
          "listFundingRecipients",
          "getFundingRecipient",
          "listFundRecipientFundingAccounts",
          "listFundRecipientOwners"
        ]
      }
    },
    {
      "route": "/workflows/manage-payment-plans",
      "type": "workflow",
      "title": "Create, list, and retrieve a payment plan",
      "description": "Create, list, and retrieve a payment plan",
      "headings": [
        "createPaymentPlan",
        "listPaymentPlans",
        "getPaymentPlan"
      ],
      "plainText": "Create, list, and retrieve a payment plan Create the payment plan on the terminal. Supply the merchant-assigned paymentPlanId in the body — the gateway does not generate it. This example models an automatic plan, so it includes a recurringOrder ; for a manual plan, omit recurringOrder . onUpdate / onDelete define how attached subscriptions behave on later update/delete. Requires a unique Idempotency-Key header. Returns 201. OPTIONAL — returns a paginated list of the terminal's payment plans and extracts the first result's paymentPlanId . Plans are in the data array. Skip this step if you already hold the paymentPlanId . Retrieve the payment plan to confirm its current state. Surfaces the plan name , frequency , and type .",
      "refs": {
        "workflowIds": [
          "manage-payment-plans"
        ],
        "operationIds": [
          "createPaymentPlan",
          "listPaymentPlans",
          "getPaymentPlan"
        ]
      }
    },
    {
      "route": "/workflows/manage-pricing-intents",
      "type": "workflow",
      "title": "Create, list, retrieve, and delete a pricing intent.",
      "description": "Create, list, retrieve, and delete a pricing intent.",
      "headings": [
        "createPricingIntent",
        "listPricingIntents",
        "getPricingIntent",
        "deletePricingIntent"
      ],
      "plainText": "Create, list, retrieve, and delete a pricing intent. Create a pricing intent (MPA 5.2 template) with base, processor (card + ACH), and gateway fees. Requires the Idempotency-Key header. Returns 201 with the intent in status: pendingReview ; capture its id for the follow-on steps. List the pricing intents associated with the ISV (paginated). Use this to discover a pricingIntentId when you do not already have one. All query parameters ( before , after , limit ) are optional; only limit is passed here. Retrieve a single pricing intent by id, including its fees and its approval status ( active , pendingReview , or rejected ). Permanently delete the pricing intent. Irreversible - it cannot be recovered or assigned to a boarding application afterwards. Does not affect merchants that are already boarded. Returns 204 No Content.",
      "refs": {
        "workflowIds": [
          "manage-pricing-intents"
        ],
        "operationIds": [
          "createPricingIntent",
          "listPricingIntents",
          "getPricingIntent",
          "deletePricingIntent"
        ]
      }
    },
    {
      "route": "/workflows/manage-subscriptions",
      "type": "workflow",
      "title": "Create, list, retrieve, update, and manually pay a subscription",
      "description": "Create, list, retrieve, update, and manually pay a subscription",
      "headings": [
        "createSubscription",
        "listSubscriptions",
        "getSubscription",
        "updateSubscription",
        "paySubscription"
      ],
      "plainText": "Create, list, retrieve, update, and manually pay a subscription Assign the customer to a payment plan by creating the subscription. The body links the payment plan ( paymentPlanId ) and the stored secure token ( paymentMethod , where the field is token , not secureTokenId ) and sets startDate . subscriptionId is the merchant-assigned handle reused by every later step. Requires a unique Idempotency-Key header. Returns 201. OPTIONAL — lists subscriptions on the terminal, filtered by customer name, and extracts the first result's subscriptionId . The response is paginated — subscriptions are in the data array. Skip this step if you already hold the subscriptionId . OPTIONAL — retrieve the subscription to confirm its current state before acting. Surfaces the status , the collection type ( manual vs automatic ), and the nextDueDate . OPTIONAL — partially updates the subscription with an RFC 6902 JSON Patch document (the patchDocument input: an array of op / path / value operations), NOT a plain resource object. You cannot patch currentState , type , frequency , or paymentPlan , and cannot remove recurringOrder , description , or name . Requires a unique Idempotency-Key header. Returns 200. Optional, and ONLY for a manual -type subscription. For an automatic subscription the terminal collects each payment itself, so running this step would take an unintended extra charge — confirm type is manual (step 3) before calling it. The body carries an order object with the amount to collect. Requires a unique Idempotency-Key header. Returns 201, and the paymentId for follow-on actions lives at payment/paymentId .",
      "refs": {
        "workflowIds": [
          "manage-subscriptions"
        ],
        "operationIds": [
          "createSubscription",
          "listSubscriptions",
          "getSubscription",
          "updateSubscription",
          "paySubscription"
        ]
      }
    },
    {
      "route": "/workflows/order-a-terminal",
      "type": "workflow",
      "title": "Create a terminal order for a processing account and track its status.",
      "description": "Create a terminal order for a processing account and track its status.",
      "headings": [
        "createTerminalOrder",
        "getTerminalOrder"
      ],
      "plainText": "Create a terminal order for a processing account and track its status. Place the terminal order against the processing account. Sends the order items (at least one solution), optional shipping details, the per-solution setup, and an optional paymentIntent (shown here for a merchant-paid purchase). Requires the Idempotency-Key header. Returns the terminalOrderId and an initial status (usually open ). OPTIONAL — re-read the terminal order by its id to track status as it moves through open -> held -> dispatched -> fulfilled (or cancelled). Poll this step, or instead subscribe to the terminalOrder.status.changed event; it is not required to complete the order.",
      "refs": {
        "workflowIds": [
          "order-a-terminal"
        ],
        "operationIds": [
          "createTerminalOrder",
          "getTerminalOrder"
        ]
      }
    },
    {
      "route": "/workflows/patch-a-pricing-intent",
      "type": "workflow",
      "title": "Partially update a pricing intent via PATCH.",
      "description": "Partially update a pricing intent via PATCH.",
      "headings": [
        "patchPricingIntent"
      ],
      "plainText": "Partially update a pricing intent via PATCH. Apply an RFC 6902 JSON Patch document to change only specific fields via PATCH. Requires the Idempotency-Key header. Returns 200 with the updated pricing intent body.",
      "refs": {
        "workflowIds": [
          "patch-a-pricing-intent"
        ],
        "operationIds": [
          "patchPricingIntent"
        ]
      }
    },
    {
      "route": "/workflows/patch-an-event-subscription",
      "type": "workflow",
      "title": "Partially update an event subscription via PATCH.",
      "description": "Partially update an event subscription via PATCH.",
      "headings": [
        "patchSubscription"
      ],
      "plainText": "Partially update an event subscription via PATCH. Apply a partial change via PATCH (RFC 6902 JSON Patch) — here disabling notifications by setting enabled to false — and return 200 with the updated body. Requires the Idempotency-Key header.",
      "refs": {
        "workflowIds": [
          "patch-an-event-subscription"
        ],
        "operationIds": [
          "patchEventSubscription"
        ]
      }
    },
    {
      "route": "/workflows/pay-with-single-use-token",
      "type": "workflow",
      "title": "Create a single-use token, run a payment, optionally reverse it",
      "description": "Create a single-use token, run a payment, optionally reverse it",
      "headings": [
        "createSingleUseToken",
        "runPayment",
        "reversePayment"
      ],
      "plainText": "Create a single-use token, run a payment, optionally reverse it Tokenize the customer's card into a single-use token. The response token is 128 chars, single-use, and expires after 30 minutes — spend it immediately in the next step. The source object is polymorphic; this models the keyed card variant (type: card). Run the payment using the single-use token from step 1. Pass the 128-char value as paymentMethod.token with paymentMethod.type set to singleUseToken. This consumes the token — it cannot be reused. Returns 201 with the paymentId and a transactionResult whose status is asserted as ready. OPTIONAL — reverse (void) the payment before it settles, using the paymentId from step 2. Omit amount to reverse the full payment. This is a void of an open-batch payment — distinct from a refund, which returns funds after settlement. Returns 200.",
      "refs": {
        "workflowIds": [
          "pay-with-single-use-token"
        ],
        "operationIds": [
          "createSingleUseToken",
          "payment",
          "reversePayment"
        ]
      }
    },
    {
      "route": "/workflows/reactivate-a-subscription",
      "type": "workflow",
      "title": "Reactivate a subscription to resume collection.",
      "description": "Reactivate a subscription to resume collection.",
      "headings": [
        "reactivateSubscription"
      ],
      "plainText": "Reactivate a subscription to resume collection. Restarts collection for a previously deactivated subscription. POST with no request body; returns 200.",
      "refs": {
        "workflowIds": [
          "reactivate-a-subscription"
        ],
        "operationIds": [
          "reactivateSubscription"
        ]
      }
    },
    {
      "route": "/workflows/refresh-a-saved-payment-method",
      "type": "workflow",
      "title": "List, retrieve, then refresh a secure token from a single-use token.",
      "description": "List, retrieve, then refresh a secure token from a single-use token.",
      "headings": [
        "listSecureTokens",
        "getSecureToken",
        "accountUpdate"
      ],
      "plainText": "List, retrieve, then refresh a secure token from a single-use token. OPTIONAL — lists secure tokens on the terminal, filtered by customer name, and extracts the first result's secureTokenId . Skip if you already hold the secureTokenId . OPTIONAL — retrieve the secure token to confirm its current state before refreshing. Surfaces the token status and the replayable token value. Refresh the stored payment details from a Hosted Fields single-use token. The body is { type: singleUseToken, token: <128-char token> } . Requires a unique Idempotency-Key header. Returns 200 (not 201).",
      "refs": {
        "workflowIds": [
          "refresh-a-saved-payment-method"
        ],
        "operationIds": [
          "listSecureTokens",
          "getSecureToken",
          "accountUpdate"
        ]
      }
    },
    {
      "route": "/workflows/refund-a-bank-transfer-payment",
      "type": "workflow",
      "title": "Referenced refund of an existing bank-transfer / ACH payment.",
      "description": "Referenced refund of an existing bank-transfer / ACH payment.",
      "headings": [
        "findBankPayment",
        "getBankPayment",
        "refundBankPayment"
      ],
      "plainText": "Referenced refund of an existing bank-transfer / ACH payment. OPTIONAL — searches for the original bank-transfer payment when you do not have its paymentId (GET /bank-transfer-payments). processingTerminalId is a required query parameter here. Skip this step when you already hold the paymentId. Take the paymentId of the matching result from data/0/paymentId . OPTIONAL — retrieves the original bank-transfer payment by paymentId (GET /bank-transfer-payments/{paymentId}) to confirm its details and batch status before refunding. An open-batch payment is reversed rather than refunded. Refunds the referenced bank-transfer payment (POST /bank-transfer-payments/{paymentId}/refund). Requires the Idempotency-Key header and a body with amount and description . Returns 200 with the refunded payment; the resulting transaction state is in transactionResult.status (reversal when the payment was in an open batch).",
      "refs": {
        "workflowIds": [
          "refund-a-bank-transfer-payment"
        ],
        "operationIds": [
          "listBankTransferPayments",
          "getBankTransferPayment",
          "refundBankTransferPayment"
        ]
      }
    },
    {
      "route": "/workflows/refund-a-card-payment",
      "type": "workflow",
      "title": "Referenced refund of an existing card payment.",
      "description": "Referenced refund of an existing card payment.",
      "headings": [
        "findCardPayment",
        "getCardPayment",
        "refundCardPayment"
      ],
      "plainText": "Referenced refund of an existing card payment. OPTIONAL — searches for the original card payment when you do not have its paymentId (GET /payments), filtering by terminal and/or order id. Skip this step when you already hold the paymentId - use getCardPayment or go straight to refundCardPayment. Take the paymentId of the matching result from data/0/paymentId and feed it into the refund step. OPTIONAL — retrieves the original card payment by paymentId (GET /payments/{paymentId}) to confirm its details and status before refunding. A referenced refund only returns funds when the payment is in a closed batch; an open-batch payment is reversed instead. Refunds the referenced card payment (POST /payments/{paymentId}/refund). Requires the Idempotency-Key header and a body with amount and description ( operator optional). The refund id is nested at refunds/0/refundId , not at the body root. Returns 200.",
      "refs": {
        "workflowIds": [
          "refund-a-card-payment"
        ],
        "operationIds": [
          "listPayments",
          "getPayment",
          "refundPayment"
        ]
      }
    },
    {
      "route": "/workflows/refund-on-a-device",
      "type": "workflow",
      "title": "Submit a refund instruction to a device, poll it to completion, and retrieve the refund.",
      "description": "Submit a refund instruction to a device, poll it to completion, and retrieve the refund.",
      "headings": [
        "sendRefundInstruction",
        "getRefundInstruction",
        "getRefund"
      ],
      "plainText": "Submit a refund instruction to a device, poll it to completion, and retrieve the refund. Required — submit the refund instruction to the device via POST /devices/{serialNumber}/refund-instructions. The device then prompts the cardholder, who is present at the device, to authorize the return of funds. Returns HTTP 202 (Accepted) with a refundInstructionId and status: inProgress — the refund is not yet complete. Requires a UUID v4 Idempotency-Key header. Required — poll GET /refund-instructions/{refundInstructionId} until status becomes completed . The gateway holds each poll open for up to a minute waiting for a status change; wait for a response before polling again. When complete, the response includes a HATEOAS link to the refund — parse the refundId from link.href for the optional getRefund step (there is no top-level refundId field on the instruction). OPTIONAL — retrieve the resulting refund via GET /refunds/{refundId} to confirm the processor approved it and to read the refund details. Supply the refundId parsed from the completed instruction's link.href.",
      "refs": {
        "workflowIds": [
          "refund-on-a-device"
        ],
        "operationIds": [
          "sendRefundInstruction",
          "getRefundInstruction",
          "getRefund"
        ]
      }
    },
    {
      "route": "/workflows/replace-a-pricing-intent",
      "type": "workflow",
      "title": "Fully replace a pricing intent via PUT.",
      "description": "Fully replace a pricing intent via PUT.",
      "headings": [
        "replacePricingIntent"
      ],
      "plainText": "Fully replace a pricing intent via PUT. Overwrite the entire pricing intent with a complete MPA 5.2 payload via PUT. Returns 204 No Content (no body). Does not affect already-onboarded merchants.",
      "refs": {
        "workflowIds": [
          "replace-a-pricing-intent"
        ],
        "operationIds": [
          "updatePricingIntent"
        ]
      }
    },
    {
      "route": "/workflows/represent-ach-payment",
      "type": "workflow",
      "title": "Retrieve an ACH return reason and re-present the payment.",
      "description": "Retrieve an ACH return reason and re-present the payment.",
      "headings": [
        "viewPayment",
        "representPayment"
      ],
      "plainText": "Retrieve an ACH return reason and re-present the payment. Retrieve the returned ACH payment to read the return reason and, most importantly, the return's own paymentId from the returns array. Save returns[0].paymentId — the re-presentment step needs it, not the original paymentId. Re-present the payment against the return's paymentId ( $steps.viewPayment.outputs.returnPaymentId ), NOT the original paymentId. The request body is optional: omit it to reuse the original bank details, or send an updated paymentMethod (the ach variant is shown here; a secureToken variant is also supported) if the customer corrected their details. If this re-presentment is itself returned, repeat viewPayment + representPayment against the new returns[0].paymentId for a second and final attempt.",
      "refs": {
        "workflowIds": [
          "represent-ach-payment"
        ],
        "operationIds": [
          "getBankTransferPayment",
          "representBankTransferPayment"
        ]
      }
    },
    {
      "route": "/workflows/reverse-a-bank-transfer-payment",
      "type": "workflow",
      "title": "Look up and reverse a bank-transfer payment in an open batch.",
      "description": "Look up and reverse a bank-transfer payment in an open batch.",
      "headings": [
        "listBankTransferPayments",
        "reverseBankTransferPayment"
      ],
      "plainText": "Look up and reverse a bank-transfer payment in an open batch. OPTIONAL — list bank transfer payments matching the search filters to find the paymentId to reverse. processingTerminalId is required for this list. Skip if you already hold the paymentId. Reverse (void) the bank transfer payment in the open batch. Takes the paymentId in the path and a required Idempotency-Key header; this endpoint has no request body (the amount cannot be varied here). Success returns transactionResult.status == reversal.",
      "refs": {
        "workflowIds": [
          "reverse-a-bank-transfer-payment"
        ],
        "operationIds": [
          "listBankTransferPayments",
          "reverseBankTransferPayment"
        ]
      }
    },
    {
      "route": "/workflows/reverse-a-bank-transfer-refund",
      "type": "workflow",
      "title": "List, retrieve, then reverse (cancel) a bank-transfer refund.",
      "description": "List, retrieve, then reverse (cancel) a bank-transfer refund.",
      "headings": [
        "listBankTransferRefunds",
        "getBankTransferRefund",
        "reverseBankTransferRefund"
      ],
      "plainText": "List, retrieve, then reverse (cancel) a bank-transfer refund. OPTIONAL — list bank-transfer refunds filtered by terminal, order, status, and date. processingTerminalId is required here. The response is paginated - refunds are in the data array. Extracts the first refund's refundId . OPTIONAL — retrieve the full detail of the first bank-transfer refund from the list. Check transactionResult.status to confirm the refund is still in an open batch before reversing it. Cancel the bank-transfer refund while it is in an open batch using the refundId from getBankTransferRefund; no funds are returned. There is no bank-transfer adjust operation - reverse is the only lifecycle action. Requires a unique Idempotency-Key header. Returns 200 with transactionResult.status == reversal .",
      "refs": {
        "workflowIds": [
          "reverse-a-bank-transfer-refund"
        ],
        "operationIds": [
          "listBankTransferRefunds",
          "getBankTransferRefund",
          "reverseBankTransferRefund"
        ]
      }
    },
    {
      "route": "/workflows/reverse-a-card-payment",
      "type": "workflow",
      "title": "Look up and reverse a card payment in an open batch.",
      "description": "Look up and reverse a card payment in an open batch.",
      "headings": [
        "listPayments",
        "reverseCardPayment"
      ],
      "plainText": "Look up and reverse a card payment in an open batch. OPTIONAL — list card payments matching the search filters to find the paymentId of the transaction to reverse. Skip this step if you already hold the paymentId. Reverse (void) the card payment in the open batch. Takes the paymentId in the path and a required Idempotency-Key header. Send amount for a partial reversal, or omit it to reverse the full amount. Success returns transactionResult.status == reversal.",
      "refs": {
        "workflowIds": [
          "reverse-a-card-payment"
        ],
        "operationIds": [
          "listPayments",
          "reversePayment"
        ]
      }
    },
    {
      "route": "/workflows/reverse-a-refund",
      "type": "workflow",
      "title": "List, retrieve, then reverse (cancel) a card refund.",
      "description": "List, retrieve, then reverse (cancel) a card refund.",
      "headings": [
        "listRefunds",
        "getRefund",
        "reverseRefund"
      ],
      "plainText": "List, retrieve, then reverse (cancel) a card refund. OPTIONAL — list card refunds filtered by terminal, order, status, and date. The response is paginated - refunds are in the data array. This step extracts the first refund's refundId for the follow-on steps. OPTIONAL — retrieve the full detail of the first card refund from the list. Inspect supportedOperations and transactionResult.status to confirm the refund can be reversed before acting. Cancel the card refund while it is in an open batch using the refundId from getRefund; no funds are returned to the cardholder. Requires a unique Idempotency-Key header. Returns 200 with transactionResult.status == reversal .",
      "refs": {
        "workflowIds": [
          "reverse-a-refund"
        ],
        "operationIds": [
          "listRefunds",
          "getRefund",
          "reverseRefund"
        ]
      }
    },
    {
      "route": "/workflows/review-funding-activity",
      "type": "workflow",
      "title": "Read funding balances then the funding activity ledger.",
      "description": "Read funding balances then the funding activity ledger.",
      "headings": [
        "getFundingBalance",
        "getFundingActivity"
      ],
      "plainText": "Read funding balances then the funding activity ledger. List the funding balance for each merchant linked to the account. Each row reports funds (total, including pending), pending (not yet sent to funding accounts), and available (usable in funding instructions). Pass merchantId to scope to one merchant. List the funding activity ledger over the required date window. Each activityRecord shows the merchant, amount , and type ( credit moved funds into the balance, debit moved funds out). recipient is populated only when type is debit . dateFrom and dateTo are required query parameters; merchantId is an optional filter.",
      "refs": {
        "workflowIds": [
          "review-funding-activity"
        ],
        "operationIds": [
          "getFundingBalance",
          "getFundingActivity"
        ]
      }
    },
    {
      "route": "/workflows/review-merchant-hierarchy",
      "type": "workflow",
      "title": "Confirm a boarded merchant's hierarchy and status via read-only reads.",
      "description": "Confirm a boarded merchant's hierarchy and status via read-only reads.",
      "headings": [
        "listMerchantPlatforms",
        "retrieveMerchantPlatform",
        "listPlatformProcessingAccounts",
        "retrieveProcessingAccount",
        "retrieveProcessingAccountPricing",
        "listProcessingAccountContacts",
        "listMerchantOwners",
        "listProcessingAccountFundingAccounts",
        "listProcessingAccountTerminalOrders",
        "listProcessingAccountProcessingTerminals"
      ],
      "plainText": "Confirm a boarded merchant's hierarchy and status via read-only reads. List the merchant platforms linked to the ISV account and select one to inspect. Paginated (before/after/limit); this reads the first page and takes the first platform. Retrieve the selected merchant platform's detail, including its legal and contact information and the status of each linked processing account. List the processing accounts under the platform and select one to inspect. Paginated; reads the first page and takes the first account. By default only open accounts are returned — set includeClosed=true to include terminated, cancelled, or rejected accounts. Retrieve the processing account's full detail: business information, MCC, status, processing configuration, and funding summary. The status output (for example, approved ) is the primary confirmation that boarding has completed. Retrieve the pricing agreement applied to the processing account. The response is polymorphic — the version field (4.0, 5.0, or 5.2) selects the agreement variant. List the contacts on the processing account. Contacts are created inline during boarding; this read confirms them post-boarding. Paginated. List the owners of the processing account, including their equity stake and whether they are a control prong or authorized signatory. Owners are created inline during boarding; this read confirms them post-boarding. Paginated. List the funding accounts linked to the processing account and their approval status. The response is a top-level array (not paginated). List the terminal orders for the processing account, including their status and shipping information. The response is a top-level array; optional status/date query filters are available. List the processing terminals configured for the processing account, including their active/inactive status and configuration. Paginated.",
      "refs": {
        "workflowIds": [
          "review-merchant-hierarchy"
        ],
        "operationIds": [
          "listMerchantPlatforms",
          "getMerchantAccounts",
          "listMerchantLocations",
          "getProcessingAccounts",
          "retrieveProcessingAccountPricing",
          "listProcessingAccountContacts",
          "listMerchantOwners",
          "listProcessingAccountsFundingAccounts",
          "listProcessingAccountsTerminalOrders",
          "listProcessingAccountsProcessingTerminals"
        ]
      }
    },
    {
      "route": "/workflows/review-settlement-reporting",
      "type": "workflow",
      "title": "List then drill into settlement reports across five report types.",
      "description": "List then drill into settlement reports across five report types.",
      "headings": [
        "listBatches",
        "retrieveBatch",
        "listTransactions",
        "retrieveTransaction",
        "listAuthorizations",
        "retrieveAuthorization",
        "listDisputes",
        "listDisputeStatuses",
        "listAchDeposits",
        "retrieveAchDeposit",
        "listAchDepositFees"
      ],
      "plainText": "List then drill into settlement reports across five report types. Batches branch — list the batches your merchants submitted to the processor on date (a required query parameter). Each row reports transaction counts, sale/held/return totals, and the owning merchant. merchantId is an optional filter. Batches branch — retrieve a single batch by its integer batchId . Chains from listBatches by reading the first row's batchId ; supply a known batchId directly if you have one. Transactions branch — list merchant transactions. You must provide EITHER date OR batchId ; modeled here with date . Optional merchantId and transactionType (Capture/Return) filters also apply. Each row includes type, amount, batch, authorization, and settlement details. Transactions branch — retrieve a single transaction by its integer transactionId . Chains from listTransactions; supply a known transactionId directly if you have one. Authorizations branch — list authorizations. You must provide EITHER date OR batchId ; modeled here with date . Optional merchantId filter. Each row shows the issuing bank's authorization response, the authorized amount, and card/transaction/batch details. Authorizations branch — retrieve a single authorization by its integer authorizationId . Chains from listAuthorizations; supply a known authorizationId directly if you have one. Disputes branch — list disputes submitted on date (a required query parameter). Each row carries the dispute type, its currentStatus (status + statusDate), and the linked transaction. Optional merchantId filter. Disputes branch — list the full status history of one dispute by its integer disputeId (each entry has a statusId, status, and statusDate). Chains from listDisputes; supply a known disputeId directly if you have one. ACH-deposits branch — list ACH deposits paid to your merchants on date (a required query parameter). Each row breaks down sales, returns, fees, and the net amount paid. Optional merchantId filter. ACH-deposits branch — ",
      "refs": {
        "workflowIds": [
          "review-settlement-reporting"
        ],
        "operationIds": [
          "getbatches",
          "getbatch",
          "getTransactions",
          "gettransaction",
          "getAuthorizations",
          "getAuthorization",
          "getdisputes",
          "getdisputesStatuses",
          "getAchDeposits",
          "getAchDeposit",
          "getAchDepositFees"
        ]
      }
    },
    {
      "route": "/workflows/run-a-bank-transfer-sale",
      "type": "workflow",
      "title": "Run a bank-transfer (ACH/PAD) sale.",
      "description": "Run a bank-transfer (ACH/PAD) sale.",
      "headings": [
        "runBankTransferSale"
      ],
      "plainText": "Run a bank-transfer (ACH/PAD) sale. Run a bank-transfer sale by POSTing to /bank-transfer-payments with the customer's ACH (US) or PAD (Canada) bank details. The example uses an ACH payload; for PAD send type: pad with transit/institution details. There is no autoCapture flag on this endpoint — a bank-transfer payment is always a sale.",
      "refs": {
        "workflowIds": [
          "run-a-bank-transfer-sale"
        ],
        "operationIds": [
          "bankTransferPayment"
        ]
      }
    },
    {
      "route": "/workflows/run-a-card-sale",
      "type": "workflow",
      "title": "Run a card sale.",
      "description": "Run a card sale.",
      "headings": [
        "runCardSale"
      ],
      "plainText": "Run a card sale. Run a card sale by POSTing to /payments. The default autoCapture: true and processAsSale: false produce a normal sale that stays adjustable in the open batch. Variants of this same step (documented, not separate steps): Surcharge: add an order.breakdown.surcharge object to the payload. MOTO / card-not-present: set channel: moto instead of web . 3-D Secure (e-commerce): first run an MPI check off-API at payments.payroc.com/merchant/mpi, then add a threeDSecure object with serviceProvider: gateway and the returned mpiReference to this payload. The MPI call is an external-system step, so it is not modeled here.",
      "refs": {
        "workflowIds": [
          "run-a-card-sale"
        ],
        "operationIds": [
          "payment"
        ]
      }
    },
    {
      "route": "/workflows/run-a-pre-authorization",
      "type": "workflow",
      "title": "Pre-authorize a card, optionally adjust the amount, capture, and optionally refund.",
      "description": "Pre-authorize a card, optionally adjust the amount, capture, and optionally refund.",
      "headings": [
        "createPreAuthorization",
        "adjustAuthorizedAmount",
        "capturePreAuthorization",
        "refundCapturedPayment"
      ],
      "plainText": "Pre-authorize a card, optionally adjust the amount, capture, and optionally refund. Create the pre-authorization to hold funds on the card. Sends both autoCapture=false and processAsSale=false so the gateway authorizes without settling - this is what makes it a pre-authorization rather than a sale. Save the returned paymentId; every later step needs it. OPTIONAL — adjust the authorized amount before capture using an order-type adjustment. Only needed when the merchant must capture MORE than originally pre-authorized (for example, a hotel adds dinner to a room hold). Skip this step to capture the original amount or less. The adjustments array is polymorphic (order/status/customer/signature); this uses the order variant to change the amount. Capture the pre-authorization to take the funds from the card. Sending an amount captures that value; omit amount to capture the full authorized amount. To capture more than authorized, run the optional adjust step first. Returns the payment with transactionResult.status reflecting the capture. OPTIONAL — run a referenced refund against the captured payment once its batch is closed, returning funds to the cardholder. If the payment is still in an open batch this operation reverses it instead of refunding. Both amount and description are required. The new refund's id lives at refunds[0].refundId in the response, not at the top level.",
      "refs": {
        "workflowIds": [
          "run-a-pre-authorization"
        ],
        "operationIds": [
          "payment",
          "adjustPayment",
          "capturePayment",
          "refundPayment"
        ]
      }
    },
    {
      "route": "/workflows/run-a-sale-on-a-device",
      "type": "workflow",
      "title": "Find a device, push a sale instruction, poll for the result, and retrieve the payment.",
      "description": "Find a device, push a sale instruction, poll for the result, and retrieve the payment.",
      "headings": [
        "findDevice",
        "submitPaymentInstruction",
        "pollPaymentInstruction",
        "retrievePayment"
      ],
      "plainText": "Find a device, push a sale instruction, poll for the result, and retrieve the payment. OPTIONAL — confirm the target device by filtering the device list on its serial number. Skip this step if you already have a known-good serial number. Returns a paginated list; the matching device is the first entry in data . Push the sale to the device. POST the instruction to /devices/{serialNumber}/payment-instructions. The default autoCapture: true (and processAsSale: false , its default) produce a normal sale that stays adjustable in the open batch; entryMethod: deviceRead prompts the cardholder to tap, insert, or swipe. The immediate 202 response is the INSTRUCTION (status inProgress ), not the payment. Long-poll the instruction until its status leaves inProgress while the cardholder taps, inserts, or swipes on the device. Each GET blocks up to ~1 minute for a status change; at runtime repeat this step until the status is completed (or canceled / failure ). On completion the response includes a HATEOAS link whose href points at the created payment (rel payment ); extract the paymentId from that href for the next step. (MiFare closed-loop cards instead return a closed-loop-read link.) OPTIONAL — retrieve the resulting payment to see whether the processor approved or declined the sale. Use the paymentId extracted from the completed instruction's HATEOAS link.href (supplied via inputs, since it is not a standalone response field).",
      "refs": {
        "workflowIds": [
          "run-a-sale-on-a-device"
        ],
        "operationIds": [
          "searchDevices",
          "sendPaymentInstruction",
          "getPaymentInstruction",
          "getPayment"
        ]
      }
    },
    {
      "route": "/workflows/run-unreferenced-bank-transfer-refund",
      "type": "workflow",
      "title": "Refund a customer's bank account (ACH) with no originating payment reference.",
      "description": "Refund a customer's bank account (ACH) with no originating payment reference.",
      "headings": [
        "runBankRefund"
      ],
      "plainText": "Refund a customer's bank account (ACH) with no originating payment reference. Issues an unreferenced bank-transfer refund (POST /bank-transfer-refunds). There is no channel field; supply a refundMethod of type ach and a customer contact method so the gateway can notify the recipient.",
      "refs": {
        "workflowIds": [
          "run-unreferenced-bank-transfer-refund"
        ],
        "operationIds": [
          "bankTransferUnreferencedRefund"
        ]
      }
    },
    {
      "route": "/workflows/run-unreferenced-card-refund",
      "type": "workflow",
      "title": "Refund a customer's card with no originating payment reference.",
      "description": "Refund a customer's card with no originating payment reference.",
      "headings": [
        "runCardRefund"
      ],
      "plainText": "Refund a customer's card with no originating payment reference. Issues an unreferenced card refund (POST /refunds). Supply channel (pos or moto) and a refundMethod of type card .",
      "refs": {
        "workflowIds": [
          "run-unreferenced-card-refund"
        ],
        "operationIds": [
          "unreferencedRefund"
        ]
      }
    },
    {
      "route": "/workflows/save-a-card-with-hosted-fields",
      "type": "workflow",
      "title": "Create a tokenization session, tokenize card details client-side, then mint a reusable secure token.",
      "description": "Create a tokenization session, tokenize card details client-side, then mint a reusable secure token.",
      "headings": [
        "createHostedFieldsSession",
        "customerSubmitsPaymentDetails",
        "saveCardFromToken"
      ],
      "plainText": "Create a tokenization session, tokenize card details client-side, then mint a reusable secure token. Create a Hosted Fields session for the terminal by POSTing to /processing-terminals/{processingTerminalId}/hosted-fields-sessions with scenario tokenization . The returned session token (expires after 10 minutes) is placed in the Hosted Fields JavaScript config in the browser. To UPDATE an already-saved card, also send the existing secureTokenId in this request. Requires an Idempotency-Key header and the libVersion. OFF-API, client-side: the Hosted Fields JavaScript library renders the embedded fields using the tokenization-scenario session token from the previous step, the customer submits their card details, and the client receives a single-use token in a submissionSuccess event. The token is single-use and expires ~30 minutes after issue; it is the singleUseToken input consumed by the next step. Convert a single-use token (from a session created with scenario tokenization ) into a REUSABLE secure token by POSTing to /processing-terminals/{processingTerminalId}/secure-tokens with a source of type singleUseToken. Because a single-use token can be used only once, this consumes the token. The response token value — not secureTokenId — is what a later payment's paymentMethod.token expects. mitAgreement is required when saving card details. Requires an Idempotency-Key header.",
      "refs": {
        "workflowIds": [
          "save-a-card-with-hosted-fields"
        ],
        "operationIds": [
          "createSession",
          "createSecureToken"
        ]
      }
    },
    {
      "route": "/workflows/save-a-payment-method",
      "type": "workflow",
      "title": "Create a reusable secure token from a customer's card or bank account.",
      "description": "Create a reusable secure token from a customer's card or bank account.",
      "headings": [
        "createSecureToken"
      ],
      "plainText": "Create a reusable secure token from a customer's card or bank account. Save the customer's payment details to the vault and return a reusable secure token. Primary path shown is the card branch (source.type = card, keyed plain-text cardDetails). For the bank account branch, replace the source object with an ach source (type, accountType, secCode, nameOnAccount, accountNumber, routingNumber) for US accounts or a pad source (type, nameOnAccount, accountNumber, transitNumber, institutionNumber) for Canadian accounts. Requires an Idempotency-Key header. Remember: the token value in the response - not secureTokenId - is what later payment.paymentMethod.token expects.",
      "refs": {
        "workflowIds": [
          "save-a-payment-method"
        ],
        "operationIds": [
          "createSecureToken"
        ]
      }
    },
    {
      "route": "/workflows/send-funds-to-a-merchant",
      "type": "workflow",
      "title": "Create a funding recipient, optionally check the balance, then send funds via a funding instruction.",
      "description": "Create a funding recipient, optionally check the balance, then send funds via a funding instruction.",
      "headings": [
        "setUpRecipient",
        "checkBalance",
        "createInstruction"
      ],
      "plainText": "Create a funding recipient, optionally check the balance, then send funds via a funding instruction. Compose the set-up-a-funding-recipient sub-workflow to create the funding recipient together with its inline owner and credit funding account. Surfaces the recipientId and fundingAccountId used as the destination of the funding instruction. OPTIONAL — read the merchant's funding balances and confirm sufficient available funds before distributing them. The response reports funds, pending, and available separately - only the available amount can be sent in a funding instruction. Filter to the target merchant with the merchantId query parameter. Create the funding instruction that moves funds from the merchant's balance to the recipient's funding account. The single merchants entry names the merchantId being distributed; its single recipients entry targets the fundingAccountId from the sub-workflow, with paymentMethod ACH and the amount in cents. For SPLIT FUNDING, add more recipients entries (each with its own fundingAccountId and amount) and/or more merchants entries. Requires a unique Idempotency-Key header.",
      "refs": {
        "workflowIds": [
          "send-funds-to-a-merchant"
        ],
        "operationIds": [
          "getFundingBalance",
          "createInstruction"
        ]
      }
    },
    {
      "route": "/workflows/set-up-a-funding-recipient",
      "type": "workflow",
      "title": "Create a funding recipient, then optionally add extra accounts and owners.",
      "description": "Create a funding recipient, then optionally add extra accounts and owners.",
      "headings": [
        "createFundingRecipient",
        "addFundingAccount",
        "addOwner"
      ],
      "plainText": "Create a funding recipient, then optionally add extra accounts and owners. Create the funding recipient. Owners and funding accounts are supplied inline here - at least one owner and at least one credit funding account are required. The gateway returns the recipientId used by all follow-on actions, and the fundingAccountId of the inline credit funding account (the destination that funding instructions target). OPTIONAL — add an additional funding account to the recipient beyond the one supplied inline at creation. A recipient's funding account accepts only use: credit. Reuses the recipientId from step 1. OPTIONAL — add an additional owner to the recipient beyond the one supplied inline at creation. Only one owner across the recipient can be the control prong. Reuses the recipientId from step 1.",
      "refs": {
        "workflowIds": [
          "set-up-a-funding-recipient"
        ],
        "operationIds": [
          "createFundingRecipient",
          "createFundRecipientFundingAccount",
          "createFundRecipientOwner"
        ]
      }
    },
    {
      "route": "/workflows/set-up-repeat-payments",
      "type": "workflow",
      "title": "Create a payment plan, save the customer's payment method, then subscribe the customer to the plan.",
      "description": "Create a payment plan, save the customer's payment method, then subscribe the customer to the plan.",
      "headings": [
        "setUpPaymentPlan",
        "savePaymentMethod",
        "subscribeCustomerToPlan"
      ],
      "plainText": "Create a payment plan, save the customer's payment method, then subscribe the customer to the plan. Set up the reusable payment plan on the terminal by invoking the manage-payment-plans sub-workflow. The plan is the schedule template later subscriptions attach to; the primary path is an automatic plan (gateway collects each payment on schedule). Passes the merchant-assigned paymentPlanId , which the gateway does not mint. The sub-workflow's create step returns 201; this step surfaces the confirmed paymentPlanId . Save the customer's payment method as a reusable secure token by invoking the save-a-payment-method sub-workflow. The primary path is the card branch; the bank-account branch (ach / pad) runs the same sub-workflow with a bank-account source. The sub-workflow returns 201 and both a secureTokenId (reference) and a token (the reusable VALUE). This step surfaces the token value, which step 3 threads into the subscription — do NOT substitute the secureTokenId. Assign the customer to the plan by invoking the manage-subscriptions sub-workflow. Links the plan ( paymentPlanId from step 1) and the stored secure token ( token from step 2 — the token VALUE, sent in paymentMethod.token , not secureTokenId ) and sets the startDate . For an automatic plan the gateway now collects each payment on schedule; for a manual plan the sub-workflow's optional pay step (paySubscription, 201) collects payments on demand — this is the \"use your own software\" branch. The create step returns 201; this step surfaces the confirmed subscriptionId and its status.",
      "refs": {
        "workflowIds": [
          "set-up-repeat-payments"
        ],
        "operationIds": []
      }
    },
    {
      "route": "/workflows/update-a-contact",
      "type": "workflow",
      "title": "List, retrieve, then update (full PUT replace) a processing account's contact.",
      "description": "List, retrieve, then update (full PUT replace) a processing account's contact.",
      "headings": [
        "listContacts",
        "getContact",
        "updateContact"
      ],
      "plainText": "List, retrieve, then update (full PUT replace) a processing account's contact. OPTIONAL — list the contacts associated with the processing account to discover the contactId. Supports before/after/limit cursor pagination. Skip if you already hold the contactId. OPTIONAL — retrieve the full details of the contact by its contactId (name, type/role, identifiers, and contact methods) before replacing it. Update the contact with a full PUT replacement against the contact schema — send the complete object, as omitted fields are not preserved. Required fields are type, firstName, lastName, and contactMethods; a contact must include at least one contact number (phone or mobile). Returns 204 No Content with no response body.",
      "refs": {
        "workflowIds": [
          "update-a-contact"
        ],
        "operationIds": [
          "listProcessingAccountContacts",
          "getContact",
          "updateContact"
        ]
      }
    },
    {
      "route": "/workflows/update-a-funding-account",
      "type": "workflow",
      "title": "List, retrieve, then update a funding account.",
      "description": "List, retrieve, then update a funding account.",
      "headings": [
        "listFundingAccounts",
        "getFundingAccount",
        "updateFundingAccount"
      ],
      "plainText": "List, retrieve, then update a funding account. OPTIONAL — list the funding accounts on your account to discover a fundingAccountId. Returns a paginated envelope; accounts are under data . Skip if you already hold the fundingAccountId. OPTIONAL — retrieve the full detail of the funding account by its fundingAccountId (account holder name, ACH payment method, status, and use) before updating. Update a funding account's details (type, account holder name, ACH information, metadata). Valid only for a funding account associated with a funding recipient - the API rejects updates to a processing-account funding account. For a funding-recipient account, use must be credit . All of type, use, nameOnAccount, and paymentMethods are required in the body. Returns 204 with no body.",
      "refs": {
        "workflowIds": [
          "update-a-funding-account"
        ],
        "operationIds": [
          "listFundingAccount",
          "getFundingAccount",
          "updateFundingAccount"
        ]
      }
    },
    {
      "route": "/workflows/update-a-funding-instruction",
      "type": "workflow",
      "title": "List, retrieve, then update (replace) a funding instruction.",
      "description": "List, retrieve, then update (replace) a funding instruction.",
      "headings": [
        "listInstructions",
        "getInstruction",
        "updateInstruction"
      ],
      "plainText": "List, retrieve, then update (replace) a funding instruction. OPTIONAL — list funding instructions sent within the required dateFrom / dateTo window, optionally paginated with before / after / limit . The response is paginated - instructions are in the data array. This step extracts the first instruction's integer instructionId for the follow-on steps. OPTIONAL — retrieve the full detail of the first funding instruction from the list. Inspect status ( accepted , pending , or completed ) to confirm the instruction can still be updated - only an accepted instruction may be modified. instructionId is top-level here. Replace the merchant funds-distribution details of the instruction retrieved above, using its integer instructionId . Only works while status is accepted ; otherwise the gateway returns 409 (cannot be modified). The body is a full replacement of the merchants array (each recipient needs fundingAccountId , paymentMethod = ACH , and amount.value ) plus optional metadata . This is a PUT that returns 204 No Content - there is no response body to capture.",
      "refs": {
        "workflowIds": [
          "update-a-funding-instruction"
        ],
        "operationIds": [
          "listInstructions",
          "getInstruction",
          "updateInstructions"
        ]
      }
    },
    {
      "route": "/workflows/update-a-funding-recipient",
      "type": "workflow",
      "title": "List, retrieve, then update (full PUT) a funding recipient.",
      "description": "List, retrieve, then update (full PUT) a funding recipient.",
      "headings": [
        "listRecipients",
        "getRecipient",
        "updateRecipient"
      ],
      "plainText": "List, retrieve, then update (full PUT) a funding recipient. OPTIONAL — return a paginated list of funding recipients so the caller can find the target recipientId. Skip if the recipientId is already known. Retrieve the target funding recipient. Required before the update: its owners and fundingAccounts summaries are echoed back into the full-object PUT payload. Update the recipient's details with a full-object PUT. Returns 204 No Content (no response body). Significant changes may require re-approval, which resets status to pending. owners and fundingAccounts are read-only summaries echoed back from the retrieve step; the mutable fields are recipientType, taxId, charityId, doingBusinessAs, address, contactMethods, and metadata.",
      "refs": {
        "workflowIds": [
          "update-a-funding-recipient"
        ],
        "operationIds": [
          "listFundingRecipients",
          "getFundingRecipient",
          "updateFundingRecipient"
        ]
      }
    },
    {
      "route": "/workflows/update-a-payment-plan",
      "type": "workflow",
      "title": "List, retrieve, then update a payment plan via JSON Patch.",
      "description": "List, retrieve, then update a payment plan via JSON Patch.",
      "headings": [
        "listPaymentPlans",
        "getPaymentPlan",
        "updatePaymentPlan"
      ],
      "plainText": "List, retrieve, then update a payment plan via JSON Patch. OPTIONAL — returns a paginated list of the terminal's payment plans and extracts the first result's paymentPlanId . Skip if you already hold the paymentPlanId . OPTIONAL — retrieve the payment plan to confirm its current state before patching. Surfaces the plan name , frequency , and type . Partially update the payment plan with an RFC 6902 JSON Patch document (the patchDocument input), NOT a plain plan object. Every property except paymentPlanId can be patched. Whether the change reaches existing subscriptions depends on the plan's onUpdate value. Requires a unique Idempotency-Key header. Returns 200.",
      "refs": {
        "workflowIds": [
          "update-a-payment-plan"
        ],
        "operationIds": [
          "listPaymentPlans",
          "getPaymentPlan",
          "updatePaymentPlan"
        ]
      }
    },
    {
      "route": "/workflows/update-a-saved-payment-method",
      "type": "workflow",
      "title": "List, retrieve, then update a secure token via JSON Patch.",
      "description": "List, retrieve, then update a secure token via JSON Patch.",
      "headings": [
        "listSecureTokens",
        "getSecureToken",
        "updateSecureToken"
      ],
      "plainText": "List, retrieve, then update a secure token via JSON Patch. OPTIONAL — lists secure tokens on the terminal, filtered by customer name, and extracts the first result's secureTokenId . Skip if you already hold the secureTokenId . OPTIONAL — retrieve the secure token to confirm its current state before patching. Surfaces the token status and the replayable token value. Partially update the secure token with an RFC 6902 JSON Patch document (the patchDocument input), NOT a plain resource object. Immutable fields (processingTerminalId, type, token, status, and sensitive source fields such as cardNumber/routingNumber) cannot be patched. Requires a unique Idempotency-Key header. Returns 200.",
      "refs": {
        "workflowIds": [
          "update-a-saved-payment-method"
        ],
        "operationIds": [
          "listSecureTokens",
          "getSecureToken",
          "updateSecureToken"
        ]
      }
    },
    {
      "route": "/workflows/update-an-event-subscription",
      "type": "workflow",
      "title": "Fully replace an event subscription via PUT.",
      "description": "Fully replace an event subscription via PUT.",
      "headings": [
        "updateSubscription"
      ],
      "plainText": "Fully replace an event subscription via PUT. Replace the entire subscription with the supplied body via PUT — omitted fields are cleared. Returns 204 No Content, so there is no response body to capture.",
      "refs": {
        "workflowIds": [
          "update-an-event-subscription"
        ],
        "operationIds": [
          "updateEventSubscription"
        ]
      }
    },
    {
      "route": "/workflows/update-an-owner",
      "type": "workflow",
      "title": "List, retrieve, then update (full PUT) an owner.",
      "description": "List, retrieve, then update (full PUT) an owner.",
      "headings": [
        "listOwners",
        "getOwner",
        "updateOwner"
      ],
      "plainText": "List, retrieve, then update (full PUT) an owner. OPTIONAL — list the owners of the processing account to discover the numeric ownerId. Supports before/after/limit cursor pagination. Skip if you already hold the ownerId. OPTIONAL — retrieve the full details of a single owner (name, date of birth, address, contact methods, and relationship) before updating. Update an owner's personal, identification, contact, and relationship details. IMPORTANT: this only takes effect for an owner associated with a funding recipient; the API rejects updating an owner of a processing account (400). Sends the full owner representation (PUT), so include every field you want to persist. Returns 204 No Content.",
      "refs": {
        "workflowIds": [
          "update-an-owner"
        ],
        "operationIds": [
          "listMerchantOwners",
          "getOwner",
          "updateOwner"
        ]
      }
    },
    {
      "route": "/workflows/verify-a-bank-account",
      "type": "workflow",
      "title": "Verify a customer's ACH (or PAD) bank account details.",
      "description": "Verify a customer's ACH (or PAD) bank account details.",
      "headings": [
        "verifyBankAccount"
      ],
      "plainText": "Verify a customer's ACH (or PAD) bank account details. Verify the customer's bank account details. Returns HTTP 200 with a verified flag indicating whether the details are valid. Inspect verified rather than relying on the 200 status alone.",
      "refs": {
        "workflowIds": [
          "verify-a-bank-account"
        ],
        "operationIds": [
          "verifyBankAccount"
        ]
      }
    },
    {
      "route": "/workflows/verify-a-card",
      "type": "workflow",
      "title": "Verify a customer's card with a zero-value authorization.",
      "description": "Verify a customer's card with a zero-value authorization.",
      "headings": [
        "verifyCard"
      ],
      "plainText": "Verify a customer's card with a zero-value authorization. Verify the customer's card details with a zero-value authorization. Primary path shown is a keyed plain-text card (card.type = card, entryMethod = keyed). Requires an Idempotency-Key header. Do not treat a 200 as success on its own: check the response verified flag (and transactionResult.status) - a valid request can still return verified = false when the card is rejected.",
      "refs": {
        "workflowIds": [
          "verify-a-card"
        ],
        "operationIds": [
          "verifyCard"
        ]
      }
    }
  ]
}
