# Create Apple Pay session

Create a session with Apple Pay to facilitate a payment.

Read our [Apple Pay tutorial](https://docs.moov.io/guides/sources/cards/apple-pay/#register-your-domains) to learn more. A successful response from this endpoint should be passed through to Apple Pay unchanged.

To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/) you'll need to specify the `/accounts/{accountID}/apple-pay.write` scope.

## Request Format

### POST

```
/accounts/{accountID}/apple-pay/sessions
```

### Example Curl Request

```shell
curl -X POST "https://api.moov.io/accounts/{accountID}/apple-pay/sessions" \
  -H "Authorization: Bearer {token}" \
  -H "X-Moov-Version: v2026.07.00" \
  -d '{
  "domain": "checkout.classbooker.dev",
  "displayName": "string"
}'
```

### Example Go Request

```go
mc, _ := moov.NewClient()

var accountID string

mc.StartApplePaySession(ctx, accountID,
  moov.StartApplePaySession{
    Domain:      "checkout.classbooker.dev",
    DisplayName: "Example account",
  })
```

### Example TypeScript Request

```typescript
import { Moov } from "@moovio/sdk";

const moov = new Moov({
  security: {
    username: "",
    password: "",
  },
});

async function run() {
  const result = await moov.applePay.createSession({
    accountID: "32ab62ca-7afd-4f49-89cb-0bb237258f23",
    createApplePaySession: {
      domain: "checkout.classbooker.dev",
      displayName: "Fay11",
    },
  });

console.log(result);
}

run();
```

### Example PHP Request

```php
declare(strict_types=1);

require 'vendor/autoload.php';

use Moov\MoovPhp;
use Moov\MoovPhp\Models\Components;

$sdk = MoovPhp\Moov::builder()
    ->setSecurity(
        new Components\Security(
            username: '',
            password: '',
        )
    )
    ->build();

$createApplePaySession = new Components\CreateApplePaySession(
    domain: 'checkout.classbooker.dev',
    displayName: 'Fay11',
);

$response = $sdk->applePay->createSession(
    accountID: '32ab62ca-7afd-4f49-89cb-0bb237258f23',
    createApplePaySession: $createApplePaySession
);

if ($response->applePaySession !== null) {
    // handle response
}
```

### Example Java Request

```java
package hello.world;

import io.moov.sdk.Moov;
import io.moov.sdk.models.components.CreateApplePaySession;
import io.moov.sdk.models.components.Security;
import io.moov.sdk.models.errors.GenericError;
import io.moov.sdk.models.operations.CreateApplePaySessionResponse;
import java.lang.Exception;

public class Application {

public static void main(String[] args) throws GenericError, Exception {

Moov sdk = Moov.builder()
                .security(Security.builder()
                    .username("")
                    .password("")
                    .build())
            .build();

CreateApplePaySessionResponse res = sdk.applePay().createSession()
                .accountID("32ab62ca-7afd-4f49-89cb-0bb237258f23")
                .createApplePaySession(CreateApplePaySession.builder()
                    .domain("checkout.classbooker.dev")
                    .displayName("Fay11")
                    .build())
                .call();

if (res.applePaySession().isPresent()) {
            System.out.println(res.applePaySession().get());
        }
    }
}
```

### Example Python Request

```python
from moovio_sdk import Moov
from moovio_sdk.models import components

with Moov(
    security=components.Security(
        username="",
        password="",
    ),
) as moov:

res = moov.apple_pay.create_session(account_id="32ab62ca-7afd-4f49-89cb-0bb237258f23", domain="checkout.classbooker.dev", display_name="Fay11")

# Handle response
    print(res)
```

### Example Ruby Request

```ruby
require 'moov_ruby'

Models = ::Moov::Models
s = ::Moov::Client.new(
  security: Models::Components::Security.new(
    username: '',
    password: ''
  )
)
res = s.apple_pay.create_session(account_id: '32ab62ca-7afd-4f49-89cb-0bb237258f23', create_apple_pay_session: Models::Components::CreateApplePaySession.new(
  domain: 'checkout.classbooker.dev',
  display_name: 'Fay11'
))

unless res.apple_pay_session.nil?
  # handle response
end
```

### Example C# Request

```csharp
using Moov.Sdk;
using Moov.Sdk.Models.Components;

var sdk = new MoovClient(security: new Security() {
    Username = "",
    Password = "",
});

var res = await sdk.ApplePay.CreateSessionAsync(
    accountID: "32ab62ca-7afd-4f49-89cb-0bb237258f23",
    body: new CreateApplePaySession() {
        Domain = "checkout.classbooker.dev",
        DisplayName = "Fay11",
    }
);

// handle response
```

## Response

The request has succeeded.

### Example Response

```json
"{\"epochTimestamp\":1733783167685,\"expiresAt\":1733786767685...}"
```

### Error Responses

1. **Invalid Syntax**:  
   ```json
   {"error": "string"}
   ```

2. **Missing or Expired Authentication**:  
   ```json
   {"error": "string"}
   ```

3. **Unauthorized Request**:  
   ```json
   {"error": "string"}
   ```

4. **Resource Not Found**:  
   ```json
   {"error": "string"}
   ```

5. **Conflict with Current State**:  
   ```json
   {"error": "string"}
   ```

6. **Validation Error**:  
   ```json
   {"error": "string"}
   ```

7. **Rate Limiting**:  
   ```json
   {"error": "string"}
   ```

8. **Unexpected Error**:  
   ```json
   {"error": "string"}
   ```

9. **Downstream Service Failure**:  
   ```json
   {"error": "string"}
   ```

## API Versioning

Set this header to v2026.07.00 to use the API described in this specification. When omitted, the server defaults to v2024.01.00, which may not match the behavior documented here.

### Additional Information

- ID of the Moov account representing the merchant.
- A UTF-8 string to display in the Buy button.
- A fully qualified top-level or sub-domain name where you will accept Apple Pay. Should not include "https".
- Stringified session object returned from Apple Pay. The string value should be deserialized as a JSON object before passing to Apple.
