> 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

# Board a new business with the API

> Learn how to board a new business from scratch, starting with its paypoint

> **Note**
>
> Intelligent boarding is in beta. To opt in, reach out to your Payabli contact.

To board a business that's new to Payabli, create its paypoint first, with the business created in the same request. Then add the business's owner, open an application that lists the services the business needs, validate it, and submit it for review. This quickstart walks through each step. For how the business, its people, its paypoint, and its applications fit together, see [Boarding overview](/guides/pay-ops-boarding-object-model-overview).

## Considerations

* The boarding API uses OAuth2. Send a Bearer token on every request. See [OAuth2 authentication](/developers/oauth-authentication).
* Each service has its own requirements. Validate reports fields that are missing or invalid, so you can fix them before you submit. For the fields boarding asks for, see [Required fields for boarding applications](/guides/pay-ops-boarding-kyc-fields-overview).
* Every application needs a signer, and the signer must be an owner. The business also needs a primary controller. Unless its legal structure is `government` or `non-profit`, it also needs at least one owner with 25% ownership or more.

## Create the paypoint and business

Send a `POST` request to `/v2/paypoints` with the paypoint's details and a `business` object that describes the business. Payabli creates both, and the paypoint starts in `pending`. Only `doingBusinessAs` and `business.legalName` are required to create the paypoint. Validate tells you what else the requested services need. To set up the business's bank accounts in the same request, add them to `business.paymentMethods`, as described in [Manage payment methods with the API](/guides/pay-ops-developer-payment-methods-manage). See the [API reference](/developers/api-reference/paypoints/create-a-paypoint) for this endpoint for full documentation.

### Request

POST [https://api-sandbox.payabli.com/api/v2/paypoints](https://api-sandbox.payabli.com/api/v2/paypoints)

**`CreatePaypointInlineBusiness`**

```curl CreatePaypointInlineBusiness
curl -X POST https://api-sandbox.payabli.com/api/v2/paypoints \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
  "business": {
    "emails": [
      "ops@example.com"
    ],
    "externalId": "rg-001",
    "legalName": "Rose Gardens LLC",
    "legalStructure": "llc",
    "merchantCatCode": "5814",
    "parentReference": "8cfec329267",
    "phone": [
      "3055551212"
    ],
    "taxReference": "477498993",
    "website": "https://example.com"
  },
  "customerServiceEmail": "support@example.com",
  "customerServicePhone": "3055551212",
  "description": "Boutique flower shop",
  "doingBusinessAs": "Rose Gardens",
  "paypointType": "merchant",
  "timezone": "America/New_York",
  "website": "https://example.com"
}'
```

**`CreatePaypointInlineBusiness`**

```typescript CreatePaypointInlineBusiness
import { PayabliClient } from "@payabli/sdk-node";

async function main() {
    const client = new PayabliClient({
        bearerAuth: {
            clientId: "YOUR_CLIENT_ID",
            clientSecret: "YOUR_CLIENT_SECRET",
        },
    });
    await client.paypoints.createPaypoint({
        paypointType: "merchant",
        doingBusinessAs: "Rose Gardens",
        description: "Boutique flower shop",
        website: "https://example.com",
        customerServicePhone: "3055551212",
        customerServiceEmail: "support@example.com",
        timezone: "America/New_York",
        business: {
            externalId: "rg-001",
            legalName: "Rose Gardens LLC",
            legalStructure: "llc",
            website: "https://example.com",
            merchantCatCode: "5814",
            phone: [
                "3055551212",
            ],
            emails: [
                "ops@example.com",
            ],
            taxReference: "477498993",
            parentReference: "8cfec329267",
        },
    });
}
main();

```

**`CreatePaypointInlineBusiness`**

```python CreatePaypointInlineBusiness
from payabli import payabli, CreatePaypointWithInlineBusiness, CreateBusinessRequest

client = payabli(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)

client.paypoints.create_paypoint(
    request=CreatePaypointWithInlineBusiness(
        paypoint_type="merchant",
        doing_business_as="Rose Gardens",
        description="Boutique flower shop",
        website="https://example.com",
        customer_service_phone="3055551212",
        customer_service_email="support@example.com",
        timezone="America/New_York",
        business=CreateBusinessRequest(
            external_id="rg-001",
            legal_name="Rose Gardens LLC",
            legal_structure="llc",
            website="https://example.com",
            merchant_cat_code="5814",
            phone=[
                "3055551212"
            ],
            emails=[
                "ops@example.com"
            ],
            tax_reference="477498993",
            parent_reference="8cfec329267",
        ),
    ),
)

```

**`CreatePaypointInlineBusiness`**

```java CreatePaypointInlineBusiness
package com.example.usage;

import io.github.payabli.api.PayabliApiClient;
import io.github.payabli.api.resources.paypoints.types.CreatePaypointPaypointsRequest;
import io.github.payabli.api.types.CreateBusinessRequest;
import io.github.payabli.api.types.CreateBusinessRequestLegalStructure;
import io.github.payabli.api.types.CreatePaypointWithInlineBusiness;
import java.util.Arrays;
import java.util.Optional;

public class Example {
    public static void main(String[] args) {
        PayabliApiClient client = PayabliApiClient.withCredentials("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")
            .build()
        ;

        client.paypoints().createPaypoint(
            CreatePaypointPaypointsRequest.of(
                CreatePaypointWithInlineBusiness
                    .builder()
                    .doingBusinessAs("Rose Gardens")
                    .business(
                        CreateBusinessRequest
                            .builder()
                            .legalName("Rose Gardens LLC")
                            .externalId(Optional.of("rg-001"))
                            .legalStructure(Optional.of(CreateBusinessRequestLegalStructure.LLC))
                            .website(Optional.of("https://example.com"))
                            .merchantCatCode(Optional.of("5814"))
                            .phone(
                                Optional.of(
                                    Arrays.asList("3055551212")
                                )
                            )
                            .emails(
                                Optional.of(
                                    Arrays.asList("ops@example.com")
                                )
                            )
                            .taxReference(Optional.of("477498993"))
                            .parentReference(Optional.of("8cfec329267"))
                            .build()
                    )
                    .paypointType(Optional.of("merchant"))
                    .description(Optional.of("Boutique flower shop"))
                    .website(Optional.of("https://example.com"))
                    .customerServicePhone(Optional.of("3055551212"))
                    .customerServiceEmail(Optional.of("support@example.com"))
                    .timezone(Optional.of("America/New_York"))
                    .build()
            )
        );
    }
}
```

**`CreatePaypointInlineBusiness`**

```csharp CreatePaypointInlineBusiness
using PayabliApi;
using System.Threading.Tasks;
using System.Collections.Generic;

public partial class Examples
{
    public async Task Example() {
        var client = new PayabliApiClient(
            clientId: "YOUR_CLIENT_ID",
            clientSecret: "YOUR_CLIENT_SECRET"
        );

        await client.Paypoints.CreatePaypointAsync(
            new CreatePaypointWithInlineBusiness {
                PaypointType = "merchant",
                DoingBusinessAs = "Rose Gardens",
                Description = "Boutique flower shop",
                Website = "https://example.com",
                CustomerServicePhone = "3055551212",
                CustomerServiceEmail = "support@example.com",
                Timezone = "America/New_York",
                Business = new CreateBusinessRequest {
                    ExternalId = "rg-001",
                    LegalName = "Rose Gardens LLC",
                    LegalStructure = CreateBusinessRequestLegalStructure.Llc,
                    Website = "https://example.com",
                    MerchantCatCode = "5814",
                    Phone = new List<string>(){
                        "3055551212",
                    }
                    ,
                    Emails = new List<string>(){
                        "ops@example.com",
                    }
                    ,
                    TaxReference = "477498993",
                    ParentReference = "8cfec329267"
                }
            }
        );
    }

}

```

**`CreatePaypointInlineBusiness`**

```go CreatePaypointInlineBusiness
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.WithClientCredentials(
            "YOUR_CLIENT_ID",
            "YOUR_CLIENT_SECRET",
        ),
    )
    request := &payabli.CreatePaypointPaypointsRequest{
        CreatePaypointWithInlineBusiness: &payabli.CreatePaypointWithInlineBusiness{
            Business: &payabli.CreateBusinessRequest{
                Emails: []string{
                    "ops@example.com",
                },
                ExternalId: payabli.String(
                    "rg-001",
                ),
                LegalName: "Rose Gardens LLC",
                LegalStructure: payabli.CreateBusinessRequestLegalStructureLlc.Ptr(),
                MerchantCatCode: payabli.String(
                    "5814",
                ),
                ParentReference: payabli.String(
                    "8cfec329267",
                ),
                Phone: []string{
                    "3055551212",
                },
                TaxReference: payabli.String(
                    "477498993",
                ),
                Website: payabli.String(
                    "https://example.com",
                ),
            },
            CustomerServiceEmail: payabli.String(
                "support@example.com",
            ),
            CustomerServicePhone: payabli.String(
                "3055551212",
            ),
            Description: payabli.String(
                "Boutique flower shop",
            ),
            DoingBusinessAs: "Rose Gardens",
            PaypointType: payabli.String(
                "merchant",
            ),
            Timezone: payabli.String(
                "America/New_York",
            ),
            Website: payabli.String(
                "https://example.com",
            ),
        },
    }
    client.Paypoints.CreatePaypoint(
        context.TODO(),
        request,
    )
}

```

**`CreatePaypointInlineBusiness`**

```php CreatePaypointInlineBusiness
<?php

namespace Example;

use Payabli\PayabliClient;
use Payabli\Types\CreatePaypointWithBusinessReference;

$client = new PayabliClient(
    clientId: 'YOUR_CLIENT_ID',
    clientSecret: 'YOUR_CLIENT_SECRET',
);
$client->paypoints->createPaypoint(
    new CreatePaypointWithBusinessReference([
        'paypointType' => 'merchant',
        'doingBusinessAs' => 'Rose Gardens',
        'description' => 'Boutique flower shop',
        'website' => 'https://example.com',
        'customerServicePhone' => '3055551212',
        'customerServiceEmail' => 'support@example.com',
        'timezone' => 'America/New_York',
        'businessReference' => 'value',
    ]),
);

```

**`CreatePaypointInlineBusiness`**

```ruby CreatePaypointInlineBusiness
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/v2/paypoints")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"business\": {\n    \"emails\": [\n      \"ops@example.com\"\n    ],\n    \"externalId\": \"rg-001\",\n    \"legalName\": \"Rose Gardens LLC\",\n    \"legalStructure\": \"llc\",\n    \"merchantCatCode\": \"5814\",\n    \"parentReference\": \"8cfec329267\",\n    \"phone\": [\n      \"3055551212\"\n    ],\n    \"taxReference\": \"477498993\",\n    \"website\": \"https://example.com\"\n  },\n  \"customerServiceEmail\": \"support@example.com\",\n  \"customerServicePhone\": \"3055551212\",\n  \"description\": \"Boutique flower shop\",\n  \"doingBusinessAs\": \"Rose Gardens\",\n  \"paypointType\": \"merchant\",\n  \"timezone\": \"America/New_York\",\n  \"website\": \"https://example.com\"\n}"

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

**`CreatePaypointInlineBusiness`**

```swift CreatePaypointInlineBusiness
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "business": [
    "emails": ["ops@example.com"],
    "externalId": "rg-001",
    "legalName": "Rose Gardens LLC",
    "legalStructure": "llc",
    "merchantCatCode": "5814",
    "parentReference": "8cfec329267",
    "phone": ["3055551212"],
    "taxReference": "477498993",
    "website": "https://example.com"
  ],
  "customerServiceEmail": "support@example.com",
  "customerServicePhone": "3055551212",
  "description": "Boutique flower shop",
  "doingBusinessAs": "Rose Gardens",
  "paypointType": "merchant",
  "timezone": "America/New_York",
  "website": "https://example.com"
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/v2/paypoints")! 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()
```

The response returns the new paypoint. Note the `businessReference` and `paypointReference` for the next steps:

### Response (201)

```json
{
  "success": true,
  "message": "Paypoint created successfully",
  "traceId": "0HNNN6HH5NDOA:00000001",
  "data": {
    "paypointReference": "019ff064-c690-7679-a73e-688418aadc7c",
    "paypointStatus": "pending",
    "createdAt": "2026-08-11T13:09:48.9047501Z",
    "_links": {
      "self": "/v2/paypoints/019ff064-c690-7679-a73e-688418aadc7c",
      "business": "/v2/businesses/019fed1a-3d6e-75d3-a81e-cba3874b0a55"
    },
    "businessReference": "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
    "doingBusinessAs": "Rose Gardens",
    "timezone": "America/New_York"
  }
}
```

## Add the owner

Send a `POST` request to `/v2/people` with the owner's details and a `businessRelationship` object that links them to the business. In `businessRelationship`, set `personType` to `Owner` with their `ownershipPercentage`, set `isPrimaryController` to `true`, and set `isSigner` to `true` to make them the person who signs the application. To add more owners or other people, send one request for each person. See [Manage people with the API](/guides/pay-ops-developer-people-manage). See the [API reference](/developers/api-reference/people/create-a-person) for this endpoint for full documentation.

### Request

POST [https://api-sandbox.payabli.com/api/v2/people](https://api-sandbox.payabli.com/api/v2/people)

**`CreatePerson`**

```curl CreatePerson
curl -X POST https://api-sandbox.payabli.com/api/v2/people \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
  "firstName": "Marcus",
  "lastName": "Delgado",
  "middleName": "James",
  "primaryEmail": "marcus.delgado@example.com",
  "secondaryEmail": "m.delgado@example.net",
  "primaryPhoneNumber": "3055551212",
  "secondaryPhoneNumber": "3055559876",
  "dateOfBirth": "1985-03-14",
  "ssn": "412-55-9021",
  "nationality": "US",
  "driversLicenseNumber": "D1234567",
  "driversLicenseState": "FL",
  "externalId": "person-001",
  "customData": {
    "department": "finance"
  },
  "addresses": [
    {
      "addressLine1": "123 Main Street",
      "addressLine2": "Suite 400",
      "cityLocality": "Miami",
      "stateProvince": "FL",
      "postalCode": "33101",
      "country": "US",
      "type": "legal"
    }
  ],
  "identificationDocuments": [
    {
      "type": "passport",
      "number": "X1234567",
      "issuingCountry": "US",
      "expirationDate": "2030-06-30"
    }
  ],
  "businessRelationship": {
    "businessReference": "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
    "personType": "Owner",
    "ownershipPercentage": 100,
    "isPrimaryController": true,
    "isSigner": true,
    "title": "CEO",
    "primaryEmail": "contact@example.com",
    "secondaryEmail": "contact.alt@example.net",
    "primaryPhoneNumber": "3055551212",
    "secondaryPhoneNumber": "3055559876",
    "billingAddress": {
      "addressLine1": "123 Main Street",
      "cityLocality": "Miami",
      "stateProvince": "FL",
      "postalCode": "33101",
      "country": "US",
      "type": "billing"
    },
    "mailingAddress": {
      "addressLine1": "456 Oak Avenue",
      "cityLocality": "Miami",
      "stateProvince": "FL",
      "postalCode": "33102",
      "country": "US",
      "type": "mailing"
    }
  }
}'
```

**`CreatePerson`**

```typescript CreatePerson
import { PayabliClient } from "@payabli/sdk-node";

async function main() {
    const client = new PayabliClient({
        bearerAuth: {
            clientId: "YOUR_CLIENT_ID",
            clientSecret: "YOUR_CLIENT_SECRET",
        },
    });
    await client.people.createPerson({
        firstName: "Marcus",
        middleName: "James",
        lastName: "Delgado",
        primaryEmail: "marcus.delgado@example.com",
        secondaryEmail: "m.delgado@example.net",
        primaryPhoneNumber: "3055551212",
        secondaryPhoneNumber: "3055559876",
        dateOfBirth: "1985-03-14",
        ssn: "412-55-9021",
        nationality: "US",
        driversLicenseNumber: "D1234567",
        driversLicenseState: "FL",
        externalId: "person-001",
        customData: {
            department: "finance",
        },
        addresses: [
            {
                addressLine1: "123 Main Street",
                addressLine2: "Suite 400",
                cityLocality: "Miami",
                stateProvince: "FL",
                postalCode: "33101",
                country: "US",
                type: "legal",
            },
        ],
        identificationDocuments: [
            {
                type: "passport",
                number: "X1234567",
                issuingCountry: "US",
                expirationDate: "2030-06-30",
            },
        ],
        businessRelationship: {
            businessReference: "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
            personType: "Owner",
            ownershipPercentage: 100,
            isPrimaryController: true,
            isSigner: true,
            title: "CEO",
            primaryEmail: "contact@example.com",
            secondaryEmail: "contact.alt@example.net",
            primaryPhoneNumber: "3055551212",
            secondaryPhoneNumber: "3055559876",
            billingAddress: {
                addressLine1: "123 Main Street",
                cityLocality: "Miami",
                stateProvince: "FL",
                postalCode: "33101",
                country: "US",
                type: "billing",
            },
            mailingAddress: {
                addressLine1: "456 Oak Avenue",
                cityLocality: "Miami",
                stateProvince: "FL",
                postalCode: "33102",
                country: "US",
                type: "mailing",
            },
        },
    });
}
main();

```

**`CreatePerson`**

```python CreatePerson
from payabli import payabli, PersonAddressRequest, IdentificationDocumentRequest, BusinessRelationshipRequest

client = payabli(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)

client.people.create_person(
    first_name="Marcus",
    middle_name="James",
    last_name="Delgado",
    primary_email="marcus.delgado@example.com",
    secondary_email="m.delgado@example.net",
    primary_phone_number="3055551212",
    secondary_phone_number="3055559876",
    date_of_birth="1985-03-14",
    ssn="412-55-9021",
    nationality="US",
    drivers_license_number="D1234567",
    drivers_license_state="FL",
    external_id="person-001",
    custom_data={
        "department": "finance"
    },
    addresses=[
        PersonAddressRequest(
            address_line_1="123 Main Street",
            address_line_2="Suite 400",
            city_locality="Miami",
            state_province="FL",
            postal_code="33101",
            country="US",
            type="legal",
        )
    ],
    identification_documents=[
        IdentificationDocumentRequest(
            type="passport",
            number="X1234567",
            issuing_country="US",
            expiration_date="2030-06-30",
        )
    ],
    business_relationship=BusinessRelationshipRequest(
        business_reference="019fed1a-3d6e-75d3-a81e-cba3874b0a55",
        person_type="Owner",
        ownership_percentage=100,
        is_primary_controller=True,
        is_signer=True,
        title="CEO",
        primary_email="contact@example.com",
        secondary_email="contact.alt@example.net",
        primary_phone_number="3055551212",
        secondary_phone_number="3055559876",
        billing_address=PersonAddressRequest(
            address_line_1="123 Main Street",
            city_locality="Miami",
            state_province="FL",
            postal_code="33101",
            country="US",
            type="billing",
        ),
        mailing_address=PersonAddressRequest(
            address_line_1="456 Oak Avenue",
            city_locality="Miami",
            state_province="FL",
            postal_code="33102",
            country="US",
            type="mailing",
        ),
    ),
)

```

**`CreatePerson`**

```java CreatePerson
package com.example.usage;

import io.github.payabli.api.PayabliApiClient;
import io.github.payabli.api.resources.people.requests.CreatePersonRequest;
import io.github.payabli.api.types.BusinessRelationshipRequest;
import io.github.payabli.api.types.IdentificationDocumentRequest;
import io.github.payabli.api.types.PersonAddressRequest;
import io.github.payabli.api.types.PersonAddressType;
import io.github.payabli.api.types.PersonType;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Optional;

public class Example {
    public static void main(String[] args) {
        PayabliApiClient client = PayabliApiClient.withCredentials("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")
            .build()
        ;

        client.people().createPerson(
            CreatePersonRequest
                .builder()
                .firstName("Marcus")
                .lastName("Delgado")
                .middleName("James")
                .primaryEmail("marcus.delgado@example.com")
                .secondaryEmail("m.delgado@example.net")
                .primaryPhoneNumber("3055551212")
                .secondaryPhoneNumber("3055559876")
                .dateOfBirth("1985-03-14")
                .ssn("412-55-9021")
                .nationality("US")
                .driversLicenseNumber("D1234567")
                .driversLicenseState("FL")
                .externalId("person-001")
                .customData(
                    new HashMap<String, Object>() {{
                        put("department", "finance");
                    }}
                )
                .addresses(
                    Optional.of(
                        Arrays.asList(
                            PersonAddressRequest
                                .builder()
                                .addressLine1("123 Main Street")
                                .addressLine2("Suite 400")
                                .cityLocality("Miami")
                                .stateProvince("FL")
                                .postalCode("33101")
                                .country("US")
                                .type(PersonAddressType.LEGAL)
                                .build()
                        )
                    )
                )
                .identificationDocuments(
                    Optional.of(
                        Arrays.asList(
                            IdentificationDocumentRequest
                                .builder()
                                .type("passport")
                                .number("X1234567")
                                .issuingCountry("US")
                                .expirationDate("2030-06-30")
                                .build()
                        )
                    )
                )
                .businessRelationship(
                    BusinessRelationshipRequest
                        .builder()
                        .businessReference("019fed1a-3d6e-75d3-a81e-cba3874b0a55")
                        .personType(PersonType.OWNER)
                        .ownershipPercentage(100.0)
                        .isPrimaryController(true)
                        .isSigner(true)
                        .title("CEO")
                        .primaryEmail("contact@example.com")
                        .secondaryEmail("contact.alt@example.net")
                        .primaryPhoneNumber("3055551212")
                        .secondaryPhoneNumber("3055559876")
                        .billingAddress(
                            PersonAddressRequest
                                .builder()
                                .addressLine1("123 Main Street")
                                .cityLocality("Miami")
                                .stateProvince("FL")
                                .postalCode("33101")
                                .country("US")
                                .type(PersonAddressType.BILLING)
                                .build()
                        )
                        .mailingAddress(
                            PersonAddressRequest
                                .builder()
                                .addressLine1("456 Oak Avenue")
                                .cityLocality("Miami")
                                .stateProvince("FL")
                                .postalCode("33102")
                                .country("US")
                                .type(PersonAddressType.MAILING)
                                .build()
                        )
                        .build()
                )
                .build()
        );
    }
}
```

**`CreatePerson`**

```csharp CreatePerson
using PayabliApi;
using System.Threading.Tasks;
using System.Collections.Generic;

public partial class Examples
{
    public async Task Example() {
        var client = new PayabliApiClient(
            clientId: "YOUR_CLIENT_ID",
            clientSecret: "YOUR_CLIENT_SECRET"
        );

        await client.People.CreatePersonAsync(
            new CreatePersonRequest {
                FirstName = "Marcus",
                MiddleName = "James",
                LastName = "Delgado",
                PrimaryEmail = "marcus.delgado@example.com",
                SecondaryEmail = "m.delgado@example.net",
                PrimaryPhoneNumber = "3055551212",
                SecondaryPhoneNumber = "3055559876",
                DateOfBirth = "1985-03-14",
                Ssn = "412-55-9021",
                Nationality = "US",
                DriversLicenseNumber = "D1234567",
                DriversLicenseState = "FL",
                ExternalId = "person-001",
                CustomData = new Dictionary<string, object?>(){
                    ["department"] = "finance",
                }
                ,
                Addresses = new List<PersonAddressRequest>(){
                    new PersonAddressRequest {
                        AddressLine1 = "123 Main Street",
                        AddressLine2 = "Suite 400",
                        CityLocality = "Miami",
                        StateProvince = "FL",
                        PostalCode = "33101",
                        Country = "US",
                        Type = PersonAddressType.Legal
                    },
                }
                ,
                IdentificationDocuments = new List<IdentificationDocumentRequest>(){
                    new IdentificationDocumentRequest {
                        Type = "passport",
                        Number = "X1234567",
                        IssuingCountry = "US",
                        ExpirationDate = "2030-06-30"
                    },
                }
                ,
                BusinessRelationship = new BusinessRelationshipRequest {
                    BusinessReference = "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
                    PersonType = PersonType.Owner,
                    OwnershipPercentage = 100,
                    IsPrimaryController = true,
                    IsSigner = true,
                    Title = "CEO",
                    PrimaryEmail = "contact@example.com",
                    SecondaryEmail = "contact.alt@example.net",
                    PrimaryPhoneNumber = "3055551212",
                    SecondaryPhoneNumber = "3055559876",
                    BillingAddress = new PersonAddressRequest {
                        AddressLine1 = "123 Main Street",
                        CityLocality = "Miami",
                        StateProvince = "FL",
                        PostalCode = "33101",
                        Country = "US",
                        Type = PersonAddressType.Billing
                    },
                    MailingAddress = new PersonAddressRequest {
                        AddressLine1 = "456 Oak Avenue",
                        CityLocality = "Miami",
                        StateProvince = "FL",
                        PostalCode = "33102",
                        Country = "US",
                        Type = PersonAddressType.Mailing
                    }
                }
            }
        );
    }

}

```

**`CreatePerson`**

```go CreatePerson
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.WithClientCredentials(
            "YOUR_CLIENT_ID",
            "YOUR_CLIENT_SECRET",
        ),
    )
    request := &payabli.CreatePersonRequest{
        FirstName: "Marcus",
        LastName: "Delgado",
        MiddleName: payabli.String(
            "James",
        ),
        PrimaryEmail: payabli.String(
            "marcus.delgado@example.com",
        ),
        SecondaryEmail: payabli.String(
            "m.delgado@example.net",
        ),
        PrimaryPhoneNumber: payabli.String(
            "3055551212",
        ),
        SecondaryPhoneNumber: payabli.String(
            "3055559876",
        ),
        DateOfBirth: payabli.String(
            "1985-03-14",
        ),
        Ssn: payabli.String(
            "412-55-9021",
        ),
        Nationality: payabli.String(
            "US",
        ),
        DriversLicenseNumber: payabli.String(
            "D1234567",
        ),
        DriversLicenseState: payabli.String(
            "FL",
        ),
        ExternalId: payabli.String(
            "person-001",
        ),
        CustomData: map[string]any{
            "department": "finance",
        },
        Addresses: []*payabli.PersonAddressRequest{
            &payabli.PersonAddressRequest{
                AddressLine1: payabli.String(
                    "123 Main Street",
                ),
                AddressLine2: payabli.String(
                    "Suite 400",
                ),
                CityLocality: payabli.String(
                    "Miami",
                ),
                StateProvince: payabli.String(
                    "FL",
                ),
                PostalCode: payabli.String(
                    "33101",
                ),
                Country: payabli.String(
                    "US",
                ),
                Type: payabli.PersonAddressTypeLegal.Ptr(),
            },
        },
        IdentificationDocuments: []*payabli.IdentificationDocumentRequest{
            &payabli.IdentificationDocumentRequest{
                Type: payabli.String(
                    "passport",
                ),
                Number: payabli.String(
                    "X1234567",
                ),
                IssuingCountry: payabli.String(
                    "US",
                ),
                ExpirationDate: payabli.String(
                    "2030-06-30",
                ),
            },
        },
        BusinessRelationship: &payabli.BusinessRelationshipRequest{
            BusinessReference: "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
            PersonType: payabli.PersonTypeOwner.Ptr(),
            OwnershipPercentage: payabli.Float64(
                100,
            ),
            IsPrimaryController: payabli.Bool(
                true,
            ),
            IsSigner: payabli.Bool(
                true,
            ),
            Title: payabli.String(
                "CEO",
            ),
            PrimaryEmail: payabli.String(
                "contact@example.com",
            ),
            SecondaryEmail: payabli.String(
                "contact.alt@example.net",
            ),
            PrimaryPhoneNumber: payabli.String(
                "3055551212",
            ),
            SecondaryPhoneNumber: payabli.String(
                "3055559876",
            ),
            BillingAddress: &payabli.PersonAddressRequest{
                AddressLine1: payabli.String(
                    "123 Main Street",
                ),
                CityLocality: payabli.String(
                    "Miami",
                ),
                StateProvince: payabli.String(
                    "FL",
                ),
                PostalCode: payabli.String(
                    "33101",
                ),
                Country: payabli.String(
                    "US",
                ),
                Type: payabli.PersonAddressTypeBilling.Ptr(),
            },
            MailingAddress: &payabli.PersonAddressRequest{
                AddressLine1: payabli.String(
                    "456 Oak Avenue",
                ),
                CityLocality: payabli.String(
                    "Miami",
                ),
                StateProvince: payabli.String(
                    "FL",
                ),
                PostalCode: payabli.String(
                    "33102",
                ),
                Country: payabli.String(
                    "US",
                ),
                Type: payabli.PersonAddressTypeMailing.Ptr(),
            },
        },
    }
    client.People.CreatePerson(
        context.TODO(),
        request,
    )
}

```

**`CreatePerson`**

```php CreatePerson
<?php

namespace Example;

use Payabli\PayabliClient;
use Payabli\People\Requests\CreatePersonRequest;
use Payabli\Types\PersonAddressRequest;
use Payabli\Types\PersonAddressType;
use Payabli\Types\IdentificationDocumentRequest;
use Payabli\Types\BusinessRelationshipRequest;
use Payabli\Types\PersonType;

$client = new PayabliClient(
    clientId: 'YOUR_CLIENT_ID',
    clientSecret: 'YOUR_CLIENT_SECRET',
);
$client->people->createPerson(
    new CreatePersonRequest([
        'firstName' => 'Marcus',
        'middleName' => 'James',
        'lastName' => 'Delgado',
        'primaryEmail' => 'marcus.delgado@example.com',
        'secondaryEmail' => 'm.delgado@example.net',
        'primaryPhoneNumber' => '3055551212',
        'secondaryPhoneNumber' => '3055559876',
        'dateOfBirth' => '1985-03-14',
        'ssn' => '412-55-9021',
        'nationality' => 'US',
        'driversLicenseNumber' => 'D1234567',
        'driversLicenseState' => 'FL',
        'externalId' => 'person-001',
        'customData' => [
            'department' => "finance",
        ],
        'addresses' => [
            new PersonAddressRequest([
                'addressLine1' => '123 Main Street',
                'addressLine2' => 'Suite 400',
                'cityLocality' => 'Miami',
                'stateProvince' => 'FL',
                'postalCode' => '33101',
                'country' => 'US',
                'type' => PersonAddressType::Legal->value,
            ]),
        ],
        'identificationDocuments' => [
            new IdentificationDocumentRequest([
                'type' => 'passport',
                'number' => 'X1234567',
                'issuingCountry' => 'US',
                'expirationDate' => '2030-06-30',
            ]),
        ],
        'businessRelationship' => new BusinessRelationshipRequest([
            'businessReference' => '019fed1a-3d6e-75d3-a81e-cba3874b0a55',
            'personType' => PersonType::Owner->value,
            'ownershipPercentage' => 100,
            'isPrimaryController' => true,
            'isSigner' => true,
            'title' => 'CEO',
            'primaryEmail' => 'contact@example.com',
            'secondaryEmail' => 'contact.alt@example.net',
            'primaryPhoneNumber' => '3055551212',
            'secondaryPhoneNumber' => '3055559876',
            'billingAddress' => new PersonAddressRequest([
                'addressLine1' => '123 Main Street',
                'cityLocality' => 'Miami',
                'stateProvince' => 'FL',
                'postalCode' => '33101',
                'country' => 'US',
                'type' => PersonAddressType::Billing->value,
            ]),
            'mailingAddress' => new PersonAddressRequest([
                'addressLine1' => '456 Oak Avenue',
                'cityLocality' => 'Miami',
                'stateProvince' => 'FL',
                'postalCode' => '33102',
                'country' => 'US',
                'type' => PersonAddressType::Mailing->value,
            ]),
        ]),
    ]),
);

```

**`CreatePerson`**

```ruby CreatePerson
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/v2/people")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"firstName\": \"Marcus\",\n  \"lastName\": \"Delgado\",\n  \"middleName\": \"James\",\n  \"primaryEmail\": \"marcus.delgado@example.com\",\n  \"secondaryEmail\": \"m.delgado@example.net\",\n  \"primaryPhoneNumber\": \"3055551212\",\n  \"secondaryPhoneNumber\": \"3055559876\",\n  \"dateOfBirth\": \"1985-03-14\",\n  \"ssn\": \"412-55-9021\",\n  \"nationality\": \"US\",\n  \"driversLicenseNumber\": \"D1234567\",\n  \"driversLicenseState\": \"FL\",\n  \"externalId\": \"person-001\",\n  \"customData\": {\n    \"department\": \"finance\"\n  },\n  \"addresses\": [\n    {\n      \"addressLine1\": \"123 Main Street\",\n      \"addressLine2\": \"Suite 400\",\n      \"cityLocality\": \"Miami\",\n      \"stateProvince\": \"FL\",\n      \"postalCode\": \"33101\",\n      \"country\": \"US\",\n      \"type\": \"legal\"\n    }\n  ],\n  \"identificationDocuments\": [\n    {\n      \"type\": \"passport\",\n      \"number\": \"X1234567\",\n      \"issuingCountry\": \"US\",\n      \"expirationDate\": \"2030-06-30\"\n    }\n  ],\n  \"businessRelationship\": {\n    \"businessReference\": \"019fed1a-3d6e-75d3-a81e-cba3874b0a55\",\n    \"personType\": \"Owner\",\n    \"ownershipPercentage\": 100,\n    \"isPrimaryController\": true,\n    \"isSigner\": true,\n    \"title\": \"CEO\",\n    \"primaryEmail\": \"contact@example.com\",\n    \"secondaryEmail\": \"contact.alt@example.net\",\n    \"primaryPhoneNumber\": \"3055551212\",\n    \"secondaryPhoneNumber\": \"3055559876\",\n    \"billingAddress\": {\n      \"addressLine1\": \"123 Main Street\",\n      \"cityLocality\": \"Miami\",\n      \"stateProvince\": \"FL\",\n      \"postalCode\": \"33101\",\n      \"country\": \"US\",\n      \"type\": \"billing\"\n    },\n    \"mailingAddress\": {\n      \"addressLine1\": \"456 Oak Avenue\",\n      \"cityLocality\": \"Miami\",\n      \"stateProvince\": \"FL\",\n      \"postalCode\": \"33102\",\n      \"country\": \"US\",\n      \"type\": \"mailing\"\n    }\n  }\n}"

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

**`CreatePerson`**

```swift CreatePerson
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "firstName": "Marcus",
  "lastName": "Delgado",
  "middleName": "James",
  "primaryEmail": "marcus.delgado@example.com",
  "secondaryEmail": "m.delgado@example.net",
  "primaryPhoneNumber": "3055551212",
  "secondaryPhoneNumber": "3055559876",
  "dateOfBirth": "1985-03-14",
  "ssn": "412-55-9021",
  "nationality": "US",
  "driversLicenseNumber": "D1234567",
  "driversLicenseState": "FL",
  "externalId": "person-001",
  "customData": ["department": "finance"],
  "addresses": [
    [
      "addressLine1": "123 Main Street",
      "addressLine2": "Suite 400",
      "cityLocality": "Miami",
      "stateProvince": "FL",
      "postalCode": "33101",
      "country": "US",
      "type": "legal"
    ]
  ],
  "identificationDocuments": [
    [
      "type": "passport",
      "number": "X1234567",
      "issuingCountry": "US",
      "expirationDate": "2030-06-30"
    ]
  ],
  "businessRelationship": [
    "businessReference": "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
    "personType": "Owner",
    "ownershipPercentage": 100,
    "isPrimaryController": true,
    "isSigner": true,
    "title": "CEO",
    "primaryEmail": "contact@example.com",
    "secondaryEmail": "contact.alt@example.net",
    "primaryPhoneNumber": "3055551212",
    "secondaryPhoneNumber": "3055559876",
    "billingAddress": [
      "addressLine1": "123 Main Street",
      "cityLocality": "Miami",
      "stateProvince": "FL",
      "postalCode": "33101",
      "country": "US",
      "type": "billing"
    ],
    "mailingAddress": [
      "addressLine1": "456 Oak Avenue",
      "cityLocality": "Miami",
      "stateProvince": "FL",
      "postalCode": "33102",
      "country": "US",
      "type": "mailing"
    ]
  ]
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/v2/people")! 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()
```

The response returns the new person, with their link to the business:

### Response (201)

```json
{
  "success": true,
  "message": "Person created successfully",
  "traceId": "0HNNQ4R2OT26Q:0000001D",
  "data": {
    "personReference": "01a0014d-ce1a-7110-9bac-c4c59647a88d",
    "firstName": "Marcus",
    "lastName": "Delgado",
    "verificationStatus": "not_started",
    "createdAt": "2026-08-14T17:24:31.3877241Z",
    "lastUpdated": "2026-08-14T17:24:31.3877242Z",
    "_links": {
      "self": "/v2/people/01a0014d-ce1a-7110-9bac-c4c59647a88d",
      "business": "/v2/businesses/019fed1a-3d6e-75d3-a81e-cba3874b0a55"
    },
    "externalId": "person-001",
    "middleName": "James",
    "primaryEmail": "marcus.delgado@example.com",
    "secondaryEmail": "m.delgado@example.net",
    "primaryPhoneNumber": "3055551212",
    "secondaryPhoneNumber": "3055559876",
    "dateOfBirth": "****-**-14",
    "ssn": "***-**-9021",
    "nationality": "US",
    "driversLicenseNumber": "D1***567",
    "driversLicenseState": "FL",
    "customData": {
      "department": "finance"
    },
    "businessRelationship": {
      "businessReference": "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
      "personType": "owner",
      "ownershipPercentage": 100,
      "beneficialOwner": true,
      "isPrimaryController": true,
      "isSigner": true,
      "title": "CEO",
      "primaryEmail": "contact@example.com",
      "secondaryEmail": "contact.alt@example.net",
      "primaryPhoneNumber": "3055551212",
      "secondaryPhoneNumber": "3055559876",
      "billingAddressUuid": "01a0014d-ce1a-7110-9bac-c4c59647a891",
      "mailingAddressUuid": "01a0014d-ce1a-7110-9bac-c4c59647a892"
    }
  }
}
```

## Create the application

Send a `POST` request to `/v2/requests` with the `businessReference` and a `services` object that lists the services the business needs. List Pay In services under `moneyIn` and Pay Out services under `moneyOut`. Include `requestTemplate` with the reference of your organization's boarding template, because Payabli reviews the application with the template's underwriting settings. The application boards the paypoint you created in the first step. An application needs a paypoint, so this request fails with `404` if the business doesn't have one. See the [API reference](/developers/api-reference/applications/create-an-application) for this endpoint for full documentation.

### Request

POST [https://api-sandbox.payabli.com/api/v2/requests](https://api-sandbox.payabli.com/api/v2/requests)

**`CreateApplicationWithServices`**

```curl CreateApplicationWithServices
curl -X POST https://api-sandbox.payabli.com/api/v2/requests \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
  "businessReference": "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
  "externalId": "APP-2025-0417",
  "requestTemplate": "019ff129-d393-7761-9a31-e5afe85b4081",
  "services": {
    "moneyIn": [
      "Ach",
      "Card"
    ],
    "moneyOut": [
      "Ach",
      "Check"
    ]
  }
}'
```

**`CreateApplicationWithServices`**

```typescript CreateApplicationWithServices
import { PayabliClient } from "@payabli/sdk-node";

async function main() {
    const client = new PayabliClient({
        bearerAuth: {
            clientId: "YOUR_CLIENT_ID",
            clientSecret: "YOUR_CLIENT_SECRET",
        },
    });
    await client.applications.createApplication({
        businessReference: "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
        externalId: "APP-2025-0417",
        requestTemplate: "019ff129-d393-7761-9a31-e5afe85b4081",
        services: {
            moneyIn: [
                "Ach",
                "Card",
            ],
            moneyOut: [
                "Ach",
                "Check",
            ],
        },
    });
}
main();

```

**`CreateApplicationWithServices`**

```python CreateApplicationWithServices
from payabli import payabli, RequestedServices

client = payabli(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)

client.applications.create_application(
    business_reference="019fed1a-3d6e-75d3-a81e-cba3874b0a55",
    external_id="APP-2025-0417",
    request_template="019ff129-d393-7761-9a31-e5afe85b4081",
    services=RequestedServices(
        money_in=[
            "Ach",
            "Card"
        ],
        money_out=[
            "Ach",
            "Check"
        ],
    ),
)

```

**`CreateApplicationWithServices`**

```java CreateApplicationWithServices
package com.example.usage;

import io.github.payabli.api.PayabliApiClient;
import io.github.payabli.api.resources.applications.requests.CreateApplicationRequest;
import io.github.payabli.api.types.MoneyInService;
import io.github.payabli.api.types.MoneyOutService;
import io.github.payabli.api.types.RequestedServices;
import java.util.Arrays;
import java.util.Optional;

public class Example {
    public static void main(String[] args) {
        PayabliApiClient client = PayabliApiClient.withCredentials("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")
            .build()
        ;

        client.applications().createApplication(
            CreateApplicationRequest
                .builder()
                .businessReference("019fed1a-3d6e-75d3-a81e-cba3874b0a55")
                .externalId("APP-2025-0417")
                .requestTemplate("019ff129-d393-7761-9a31-e5afe85b4081")
                .services(
                    RequestedServices
                        .builder()
                        .moneyIn(
                            Optional.of(
                                Arrays.asList(MoneyInService.ACH, MoneyInService.CARD)
                            )
                        )
                        .moneyOut(
                            Optional.of(
                                Arrays.asList(MoneyOutService.ACH, MoneyOutService.CHECK)
                            )
                        )
                        .build()
                )
                .build()
        );
    }
}
```

**`CreateApplicationWithServices`**

```csharp CreateApplicationWithServices
using PayabliApi;
using System.Threading.Tasks;
using System.Collections.Generic;

public partial class Examples
{
    public async Task Example() {
        var client = new PayabliApiClient(
            clientId: "YOUR_CLIENT_ID",
            clientSecret: "YOUR_CLIENT_SECRET"
        );

        await client.Applications.CreateApplicationAsync(
            new CreateApplicationRequest {
                BusinessReference = "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
                ExternalId = "APP-2025-0417",
                RequestTemplate = "019ff129-d393-7761-9a31-e5afe85b4081",
                Services = new RequestedServices {
                    MoneyIn = new List<MoneyInService>(){
                        MoneyInService.Ach,
                        MoneyInService.Card,
                    }
                    ,
                    MoneyOut = new List<MoneyOutService>(){
                        MoneyOutService.Ach,
                        MoneyOutService.Check,
                    }

                }
            }
        );
    }

}

```

**`CreateApplicationWithServices`**

```go CreateApplicationWithServices
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.WithClientCredentials(
            "YOUR_CLIENT_ID",
            "YOUR_CLIENT_SECRET",
        ),
    )
    request := &payabli.CreateApplicationRequest{
        BusinessReference: "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
        ExternalId: payabli.String(
            "APP-2025-0417",
        ),
        RequestTemplate: payabli.String(
            "019ff129-d393-7761-9a31-e5afe85b4081",
        ),
        Services: &payabli.RequestedServices{
            MoneyIn: []payabli.MoneyInService{
                payabli.MoneyInServiceAch,
                payabli.MoneyInServiceCard,
            },
            MoneyOut: []payabli.MoneyOutService{
                payabli.MoneyOutServiceAch,
                payabli.MoneyOutServiceCheck,
            },
        },
    }
    client.Applications.CreateApplication(
        context.TODO(),
        request,
    )
}

```

**`CreateApplicationWithServices`**

```php CreateApplicationWithServices
<?php

namespace Example;

use Payabli\PayabliClient;
use Payabli\Applications\Requests\CreateApplicationRequest;
use Payabli\Types\RequestedServices;
use Payabli\Types\MoneyInService;
use Payabli\Types\MoneyOutService;

$client = new PayabliClient(
    clientId: 'YOUR_CLIENT_ID',
    clientSecret: 'YOUR_CLIENT_SECRET',
);
$client->applications->createApplication(
    new CreateApplicationRequest([
        'businessReference' => '019fed1a-3d6e-75d3-a81e-cba3874b0a55',
        'externalId' => 'APP-2025-0417',
        'requestTemplate' => '019ff129-d393-7761-9a31-e5afe85b4081',
        'services' => new RequestedServices([
            'moneyIn' => [
                MoneyInService::Ach->value,
                MoneyInService::Card->value,
            ],
            'moneyOut' => [
                MoneyOutService::Ach->value,
                MoneyOutService::Check->value,
            ],
        ]),
    ]),
);

```

**`CreateApplicationWithServices`**

```ruby CreateApplicationWithServices
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/v2/requests")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"businessReference\": \"019fed1a-3d6e-75d3-a81e-cba3874b0a55\",\n  \"externalId\": \"APP-2025-0417\",\n  \"requestTemplate\": \"019ff129-d393-7761-9a31-e5afe85b4081\",\n  \"services\": {\n    \"moneyIn\": [\n      \"Ach\",\n      \"Card\"\n    ],\n    \"moneyOut\": [\n      \"Ach\",\n      \"Check\"\n    ]\n  }\n}"

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

**`CreateApplicationWithServices`**

```swift CreateApplicationWithServices
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "businessReference": "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
  "externalId": "APP-2025-0417",
  "requestTemplate": "019ff129-d393-7761-9a31-e5afe85b4081",
  "services": [
    "moneyIn": ["Ach", "Card"],
    "moneyOut": ["Ach", "Check"]
  ]
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/v2/requests")! 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()
```

The response returns the new application in `draft`. The `requestsReference` identifies the application in the next steps:

### Response (201)

```json
{
  "success": true,
  "message": "Application created successfully",
  "traceId": "0HNONVRI1TBCP:00000054",
  "data": {
    "requestsReference": "3f3caa7b-bdfe-4bf1-814b-30d54859247c",
    "businessReference": "019fed1a-3d6e-75d3-a81e-cba3874b0a55",
    "applicationStatus": "draft",
    "applicationStatusCode": 1,
    "allowedActions": [
      "submit",
      "withdraw",
      "abandon"
    ],
    "createdAt": "2026-07-01T15:00:01.734346Z",
    "_links": {
      "self": "/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c",
      "business": "/v2/businesses/019fed1a-3d6e-75d3-a81e-cba3874b0a55"
    },
    "paypointReference": "019ff064-c690-7679-a73e-688418aadc7c",
    "paypointStatus": "pending",
    "externalId": "APP-2025-0417",
    "parent": "a8806f02-23b3-4f6d-bba3-42e1b94326ea",
    "parentOrgName": "PropertyManager Pro",
    "requestTemplate": "019ff129-d393-7761-9a31-e5afe85b4081",
    "services": {
      "moneyIn": [
        "Ach",
        "Card"
      ],
      "moneyOut": [
        "Ach",
        "Check"
      ]
    }
  }
}
```

## Validate the application

Check that the business, its people, and its payment methods have everything the requested services need, and that their values are valid. Send a `POST` request to `/v2/requests/{requestsReference}/validate`. Validation doesn't change the application. See the [API reference](/developers/api-reference/applications/validate-an-application) for this endpoint for full documentation.

### Request

POST [https://api-sandbox.payabli.com/api/v2/requests/\{requestsReference}/validate](https://api-sandbox.payabli.com/api/v2/requests/\{requestsReference}/validate)

**`ValidateNewApplication`**

```curl ValidateNewApplication
curl -X POST https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/validate \
     -H "Authorization: Bearer <token>"
```

**`ValidateNewApplication`**

```typescript ValidateNewApplication
import { PayabliClient } from "@payabli/sdk-node";

async function main() {
    const client = new PayabliClient({
        bearerAuth: {
            clientId: "YOUR_CLIENT_ID",
            clientSecret: "YOUR_CLIENT_SECRET",
        },
    });
    await client.applications.validateApplication("3f3caa7b-bdfe-4bf1-814b-30d54859247c");
}
main();

```

**`ValidateNewApplication`**

```python ValidateNewApplication
from payabli import payabli

client = payabli(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)

client.applications.validate_application(
    requests_reference="3f3caa7b-bdfe-4bf1-814b-30d54859247c",
)

```

**`ValidateNewApplication`**

```java ValidateNewApplication
package com.example.usage;

import io.github.payabli.api.PayabliApiClient;

public class Example {
    public static void main(String[] args) {
        PayabliApiClient client = PayabliApiClient.withCredentials("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")
            .build()
        ;

        client.applications().validateApplication("3f3caa7b-bdfe-4bf1-814b-30d54859247c");
    }
}
```

**`ValidateNewApplication`**

```csharp ValidateNewApplication
using PayabliApi;
using System.Threading.Tasks;

public partial class Examples
{
    public async Task Example() {
        var client = new PayabliApiClient(
            clientId: "YOUR_CLIENT_ID",
            clientSecret: "YOUR_CLIENT_SECRET"
        );

        await client.Applications.ValidateApplicationAsync(
            "3f3caa7b-bdfe-4bf1-814b-30d54859247c"
        );
    }

}

```

**`ValidateNewApplication`**

```go ValidateNewApplication
package example

import (
    context "context"

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

func do() {
    client := client.NewClient(
        option.WithClientCredentials(
            "YOUR_CLIENT_ID",
            "YOUR_CLIENT_SECRET",
        ),
    )
    client.Applications.ValidateApplication(
        context.TODO(),
        "3f3caa7b-bdfe-4bf1-814b-30d54859247c",
    )
}

```

**`ValidateNewApplication`**

```php ValidateNewApplication
<?php

namespace Example;

use Payabli\PayabliClient;

$client = new PayabliClient(
    clientId: 'YOUR_CLIENT_ID',
    clientSecret: 'YOUR_CLIENT_SECRET',
);
$client->applications->validateApplication(
    '3f3caa7b-bdfe-4bf1-814b-30d54859247c',
);

```

**`ValidateNewApplication`**

```ruby ValidateNewApplication
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/validate")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'

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

**`ValidateNewApplication`**

```swift ValidateNewApplication
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/validate")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers

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()
```

When `valid` is `true`, the records have everything the requested services need:

### Response (200)

```json
{
  "success": true,
  "message": "Validation completed",
  "traceId": "0HNP4OM1AUIEG:00000008",
  "data": {
    "valid": true,
    "servicesEvaluated": [
      "payInCard",
      "payInAch",
      "payOutAch",
      "payOutCheck"
    ],
    "sections": {
      "business": {
        "complete": true,
        "missingFields": []
      },
      "salesAndPayments": {
        "complete": true,
        "missingFields": []
      },
      "banking": {
        "complete": true,
        "missingFields": []
      },
      "people": {
        "complete": true,
        "missingFields": []
      }
    }
  }
}
```

When `valid` is `false`, each section lists its `missingFields`. The `field` value is the path on the record to fix, such as `business.taxReference`. Update that record, such as with a `PATCH` request to the business, then validate again. If a `field` starts with `documents.`, it's a required document, not a record field: upload the file to the application instead. See [Upload documents](/guides/pay-ops-developer-applications-manage#upload-documents). For an example response with missing fields, see the [API reference](/developers/api-reference/applications/validate-an-application) for this endpoint.

## Submit the application

Send a `POST` request to `/v2/requests/{requestsReference}/submit` with a `signer` object that holds the signature details. Payabli records the signer's identity from their person record and business link. See the [API reference](/developers/api-reference/applications/submit-an-application) for this endpoint for full documentation.

### Request

POST [https://api-sandbox.payabli.com/api/v2/requests/\{requestsReference}/submit](https://api-sandbox.payabli.com/api/v2/requests/\{requestsReference}/submit)

**`SubmitApplication`**

```curl SubmitApplication
curl -X POST https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/submit \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
  "signer": {
    "personReference": "01a0014d-ce1a-7110-9bac-c4c59647a88d",
    "signature": "Marcus J Delgado",
    "signatureType": "type",
    "acceptance": true,
    "pciAttestation": true,
    "reportedSignerIp": "203.0.113.7"
  }
}'
```

**`SubmitApplication`**

```typescript SubmitApplication
import { PayabliClient } from "@payabli/sdk-node";

async function main() {
    const client = new PayabliClient({
        bearerAuth: {
            clientId: "YOUR_CLIENT_ID",
            clientSecret: "YOUR_CLIENT_SECRET",
        },
    });
    await client.applications.submitApplication("3f3caa7b-bdfe-4bf1-814b-30d54859247c", {
        signer: {
            personReference: "01a0014d-ce1a-7110-9bac-c4c59647a88d",
            signature: "Marcus J Delgado",
            signatureType: "type",
            acceptance: true,
            pciAttestation: true,
            reportedSignerIp: "203.0.113.7",
        },
    });
}
main();

```

**`SubmitApplication`**

```python SubmitApplication
from payabli import payabli, SubmitSigner

client = payabli(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)

client.applications.submit_application(
    requests_reference="3f3caa7b-bdfe-4bf1-814b-30d54859247c",
    signer=SubmitSigner(
        person_reference="01a0014d-ce1a-7110-9bac-c4c59647a88d",
        signature="Marcus J Delgado",
        signature_type="type",
        acceptance=True,
        pci_attestation=True,
        reported_signer_ip="203.0.113.7",
    ),
)

```

**`SubmitApplication`**

```java SubmitApplication
package com.example.usage;

import io.github.payabli.api.PayabliApiClient;
import io.github.payabli.api.resources.applications.requests.SubmitApplicationRequest;
import io.github.payabli.api.types.SignatureType;
import io.github.payabli.api.types.SubmitSigner;

public class Example {
    public static void main(String[] args) {
        PayabliApiClient client = PayabliApiClient.withCredentials("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")
            .build()
        ;

        client.applications().submitApplication(
            "3f3caa7b-bdfe-4bf1-814b-30d54859247c",
            SubmitApplicationRequest
                .builder()
                .signer(
                    SubmitSigner
                        .builder()
                        .personReference("01a0014d-ce1a-7110-9bac-c4c59647a88d")
                        .signature("Marcus J Delgado")
                        .signatureType(SignatureType.TYPE)
                        .acceptance(true)
                        .pciAttestation(true)
                        .reportedSignerIp("203.0.113.7")
                        .build()
                )
                .build()
        );
    }
}
```

**`SubmitApplication`**

```csharp SubmitApplication
using PayabliApi;
using System.Threading.Tasks;

public partial class Examples
{
    public async Task Example() {
        var client = new PayabliApiClient(
            clientId: "YOUR_CLIENT_ID",
            clientSecret: "YOUR_CLIENT_SECRET"
        );

        await client.Applications.SubmitApplicationAsync(
            requestsReference: "3f3caa7b-bdfe-4bf1-814b-30d54859247c",
            request: new SubmitApplicationRequest {
                Signer = new SubmitSigner {
                    PersonReference = "01a0014d-ce1a-7110-9bac-c4c59647a88d",
                    Signature = "Marcus J Delgado",
                    SignatureType = SignatureType.Type,
                    Acceptance = true,
                    PciAttestation = true,
                    ReportedSignerIp = "203.0.113.7"
                }
            }
        );
    }

}

```

**`SubmitApplication`**

```go SubmitApplication
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.WithClientCredentials(
            "YOUR_CLIENT_ID",
            "YOUR_CLIENT_SECRET",
        ),
    )
    request := &payabli.SubmitApplicationRequest{
        Signer: &payabli.SubmitSigner{
            PersonReference: payabli.String(
                "01a0014d-ce1a-7110-9bac-c4c59647a88d",
            ),
            Signature: payabli.String(
                "Marcus J Delgado",
            ),
            SignatureType: payabli.SignatureTypeType.Ptr(),
            Acceptance: payabli.Bool(
                true,
            ),
            PciAttestation: payabli.Bool(
                true,
            ),
            ReportedSignerIp: payabli.String(
                "203.0.113.7",
            ),
        },
    }
    client.Applications.SubmitApplication(
        context.TODO(),
        "3f3caa7b-bdfe-4bf1-814b-30d54859247c",
        request,
    )
}

```

**`SubmitApplication`**

```php SubmitApplication
<?php

namespace Example;

use Payabli\PayabliClient;
use Payabli\Applications\Requests\SubmitApplicationRequest;
use Payabli\Types\SubmitSigner;
use Payabli\Types\SignatureType;

$client = new PayabliClient(
    clientId: 'YOUR_CLIENT_ID',
    clientSecret: 'YOUR_CLIENT_SECRET',
);
$client->applications->submitApplication(
    '3f3caa7b-bdfe-4bf1-814b-30d54859247c',
    new SubmitApplicationRequest([
        'signer' => new SubmitSigner([
            'personReference' => '01a0014d-ce1a-7110-9bac-c4c59647a88d',
            'signature' => 'Marcus J Delgado',
            'signatureType' => SignatureType::Type->value,
            'acceptance' => true,
            'pciAttestation' => true,
            'reportedSignerIp' => '203.0.113.7',
        ]),
    ]),
);

```

**`SubmitApplication`**

```ruby SubmitApplication
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/submit")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"signer\": {\n    \"personReference\": \"01a0014d-ce1a-7110-9bac-c4c59647a88d\",\n    \"signature\": \"Marcus J Delgado\",\n    \"signatureType\": \"type\",\n    \"acceptance\": true,\n    \"pciAttestation\": true,\n    \"reportedSignerIp\": \"203.0.113.7\"\n  }\n}"

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

**`SubmitApplication`**

```swift SubmitApplication
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["signer": [
    "personReference": "01a0014d-ce1a-7110-9bac-c4c59647a88d",
    "signature": "Marcus J Delgado",
    "signatureType": "type",
    "acceptance": true,
    "pciAttestation": true,
    "reportedSignerIp": "203.0.113.7"
  ]] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/submit")! 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()
```

The response returns the application's new status:

### Response (200)

```json
{
  "success": true,
  "message": "Application submitted",
  "traceId": "0HNONVRI1SMEU:0000068E",
  "data": {
    "requestsReference": "3f3caa7b-bdfe-4bf1-814b-30d54859247c",
    "applicationStatus": "submitted",
    "allowedActions": [
      "startVerification",
      "withdraw",
      "abandon",
      "markError"
    ]
  }
}
```

After you submit the application, it moves through review. To answer underwriting, see [Respond to underwriting requests](/guides/pay-ops-developer-applications-manage#respond-to-underwriting-requests). To follow the application's progress, see [Track status changes](/guides/pay-ops-developer-applications-manage#track-status-changes).

## Related resources

See these related resources to help you get the most out of Payabli.

#### References

* **[Required fields for boarding applications](/guides/pay-ops-boarding-kyc-fields-overview)** - Learn more about the Know Your Customer (KYC) and Know Your Business (KYB) fields required for merchant boarding
* **[Boarding application statuses](/guides/pay-ops-boarding-application-status-reference)** - Learn about the statuses a boarding application moves through and what moves it from one status to the next

#### Related topics

* **[Intelligent boarding overview](/guides/pay-ops-boarding-object-model-overview)** - Understand the objects and application lifecycle behind intelligent boarding paypoints on Payabli
* **[Manage applications with the API](/guides/pay-ops-developer-applications-manage)** - Learn how to create, submit, and track boarding applications with the Payabli API
* **[Manage people with the API](/guides/pay-ops-developer-people-manage)** - Learn how to create, read, update, and search the people behind a business with the Payabli API
* **[Manage paypoints with the API](/guides/pay-ops-developer-boarding-paypoints-manage)** - Learn how to create, read, update, and list boarding paypoints with the Payabli API