> This is Payabli documentation. For a complete page index, fetch https://docs.payabli.com/llms.txt — append .md to any page URL for lightweight markdown. For section-level indexes, query parameters, and other AI-optimized access methods, see https://docs.payabli.com/ai-agents.md

# Create multi-product boarding app

POST https://api-sandbox.payabli.com/api/Boarding/applications
Content-Type: application/json

Creates a new boarding application linked to an existing paypoint as part of the multi-product boarding flow. Use this endpoint to add new services to a paypoint without creating a duplicate record. The system copies eligible business, contact, banking, and address data from the paypoint to the new application based on 1:1 field matching. The merchant only needs to provide fields that are specific to the new service. See the [Multi-product boarding](/guides/pay-ops-developer-boarding-multi-product) guide for the full flow.

Reference: https://docs.payabli.com/developers/api-reference/boarding/create-multi-product-boarding-application

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: payabliApi
  version: 1.0.0
paths:
  /Boarding/applications:
    post:
      operationId: add-service-to-paypoint-from-app
      summary: Create multi-product boarding application
      description: >-
        Creates a new boarding application linked to an existing paypoint as
        part of the multi-product boarding flow. Use this endpoint to add new
        services to a paypoint without creating a duplicate record. The system
        copies eligible business, contact, banking, and address data from the
        paypoint to the new application based on 1:1 field matching. The
        merchant only needs to provide fields that are specific to the new
        service. See the [Multi-product
        boarding](/guides/pay-ops-developer-boarding-multi-product) guide for
        the full flow.
      tags:
        - subpackage_boarding
      parameters:
        - name: requestToken
          in: header
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/type_boarding:CreateApplicationFromPaypointResponse
        '400':
          description: Bad request/ invalid data
          content:
            application/json:
              schema:
                description: Any type
        '401':
          description: Unauthorized request.
          content:
            application/json:
              schema:
                description: Any type
        '500':
          description: Internal API Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Database connection error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/type_:PayabliApiResponse'
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/type_boarding:CreateApplicationFromPaypointRequest
servers:
  - url: https://api-sandbox.payabli.com/api
  - url: https://api.payabli.com/api
components:
  schemas:
    type_boarding:CreateApplicationFromPaypointRequest:
      type: object
      properties:
        paypointId:
          type: integer
          format: int64
          description: ID of the existing paypoint to link to this application.
        templateId:
          type: integer
          format: int64
          description: ID of the boarding template to use for the new application.
        recipientEmail:
          type: string
          description: >-
            Email address where the boarding link is sent. Required. If you
            don't want to email the merchant, send to an internal address and
            use `returnBoardingAccessInfoInLine` to retrieve the link from the
            response instead.
        returnBoardingAccessInfoInLine:
          type: boolean
          description: >-
            When `true`, returns the boarding access information directly in the
            response.
        onCreate:
          type: array
          items:
            type: string
          description: >-
            Additional actions to trigger when the application is created.
            Currently only `submitApplication` is supported, which automatically
            submits the application on creation and skips the draft state.
      required:
        - paypointId
        - templateId
        - recipientEmail
      description: >-
        Request to create a boarding application linked to an existing paypoint.
        Used for adding new services to a paypoint without creating a duplicate
        record.
      title: CreateApplicationFromPaypointRequest
    type_:Responsecode:
      type: integer
      description: >-
        Code for the response. Learn more in [API Response
        Codes](/developers/api-reference/api-responses).
      title: Responsecode
    type_:PageIdentifier:
      type: string
      description: Auxiliary validation used internally by payment pages and components.
      title: PageIdentifier
    type_:RoomIdNotInUse:
      type: integer
      format: int64
      description: Field not in use on this endpoint. It always returns `0`.
      title: RoomIdNotInUse
    type_:IsSuccess:
      type: boolean
      description: >-
        Boolean indicating whether the operation was successful. A `true` value
        indicates success. A `false` value indicates failure.
      title: IsSuccess
    type_:ResponseText:
      type: string
      description: 'Response text for operation: ''Success'' or ''Declined''.'
      title: ResponseText
    type_boarding:CreateApplicationFromPaypointResponseData:
      type: object
      properties:
        appId:
          type: integer
          format: int64
          description: Unique identifier for the created application.
        boardingLink:
          type: string
          description: URL where the merchant can complete the boarding process.
      title: CreateApplicationFromPaypointResponseData
    type_boarding:CreateApplicationFromPaypointResponse:
      type: object
      properties:
        responseCode:
          $ref: '#/components/schemas/type_:Responsecode'
        pageIdentifier:
          $ref: '#/components/schemas/type_:PageIdentifier'
        roomId:
          $ref: '#/components/schemas/type_:RoomIdNotInUse'
        isSuccess:
          $ref: '#/components/schemas/type_:IsSuccess'
        responseText:
          $ref: '#/components/schemas/type_:ResponseText'
        responseData:
          $ref: >-
            #/components/schemas/type_boarding:CreateApplicationFromPaypointResponseData
      required:
        - responseText
      description: >-
        Response returned when creating a boarding application linked to an
        existing paypoint.
      title: CreateApplicationFromPaypointResponse
    type_:Responsedata:
      type: object
      additionalProperties:
        description: Any type
      description: The object containing the response data.
      title: Responsedata
    type_:PayabliApiResponse:
      type: object
      properties:
        isSuccess:
          $ref: '#/components/schemas/type_:IsSuccess'
        responseData:
          $ref: '#/components/schemas/type_:Responsedata'
        responseText:
          $ref: '#/components/schemas/type_:ResponseText'
      required:
        - responseText
      title: PayabliApiResponse
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: requestToken

```

## SDK Code Examples

```typescript Create application from paypoint
import { PayabliClient } from "@payabli/sdk-node";

async function main() {
    const client = new PayabliClient({
        apiKey: "YOUR_API_KEY_HERE",
    });
    await client.boarding.addServiceToPaypointFromApp({
        paypointId: 123,
        templateId: 456,
        recipientEmail: "merchant@example.com",
        returnBoardingAccessInfoInLine: true,
        onCreate: [
            "submitApplication",
        ],
    });
}
main();

```

```python Create application from paypoint
from payabli import payabli

client = payabli(
    api_key="YOUR_API_KEY_HERE",
)

client.boarding.add_service_to_paypoint_from_app(
    paypoint_id=123,
    template_id=456,
    recipient_email="merchant@example.com",
    return_boarding_access_info_in_line=True,
    on_create=[
        "submitApplication"
    ],
)

```

```csharp Create application from paypoint
using PayabliPayabliApi;
using System.Threading.Tasks;
using System.Collections.Generic;

namespace Usage;

public class Example
{
    public async Task Do() {
        var client = new PayabliPayabliApiClient(
            apiKey: "YOUR_API_KEY_HERE"
        );

        await client.Boarding.AddServiceToPaypointFromAppAsync(
            new CreateApplicationFromPaypointRequest {
                PaypointId = 123L,
                TemplateId = 456L,
                RecipientEmail = "merchant@example.com",
                ReturnBoardingAccessInfoInLine = true,
                OnCreate = new List<string>(){
                    "submitApplication",
                }

            }
        );
    }

}

```

```go Create application from paypoint
package example

import (
    context "context"

    payabli "github.com/payabli/sdk-go"
    client "github.com/payabli/sdk-go/client"
    option "github.com/payabli/sdk-go/option"
)

func do() {
    client := client.NewClient(
        option.WithApiKey(
            "YOUR_API_KEY_HERE",
        ),
    )
    request := &payabli.CreateApplicationFromPaypointRequest{
        PaypointId: int64(123),
        TemplateId: int64(456),
        RecipientEmail: "merchant@example.com",
        ReturnBoardingAccessInfoInLine: payabli.Bool(
            true,
        ),
        OnCreate: []string{
            "submitApplication",
        },
    }
    client.Boarding.AddServiceToPaypointFromApp(
        context.TODO(),
        request,
    )
}

```

```ruby Create application from paypoint
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/Boarding/applications")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["requestToken"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"paypointId\": 123,\n  \"templateId\": 456,\n  \"recipientEmail\": \"merchant@example.com\",\n  \"returnBoardingAccessInfoInLine\": true,\n  \"onCreate\": [\n    \"submitApplication\"\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java Create application from paypoint
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api-sandbox.payabli.com/api/Boarding/applications")
  .header("requestToken", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"paypointId\": 123,\n  \"templateId\": 456,\n  \"recipientEmail\": \"merchant@example.com\",\n  \"returnBoardingAccessInfoInLine\": true,\n  \"onCreate\": [\n    \"submitApplication\"\n  ]\n}")
  .asString();
```

```php Create application from paypoint
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api-sandbox.payabli.com/api/Boarding/applications', [
  'body' => '{
  "paypointId": 123,
  "templateId": 456,
  "recipientEmail": "merchant@example.com",
  "returnBoardingAccessInfoInLine": true,
  "onCreate": [
    "submitApplication"
  ]
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'requestToken' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```swift Create application from paypoint
import Foundation

let headers = [
  "requestToken": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "paypointId": 123,
  "templateId": 456,
  "recipientEmail": "merchant@example.com",
  "returnBoardingAccessInfoInLine": true,
  "onCreate": ["submitApplication"]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/Boarding/applications")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```