To send at a specific time, set `scheduleType` to `SCHEDULED` and put the time in `at`. The default is `DIRECTLY`.

## Format

| Field | Value |
| --- | --- |
| `scheduleType` | `"SCHEDULED"` |
| `at` | `"2026-09-01 09:00:00"` — `Y-m-d H:i:s`, **Korea Standard Time** |

ISO 8601 (`2026-09-01T09:00:00Z`) and Unix timestamps are not accepted.

## Examples

### Node.js / TypeScript

```typescript
await sendgo.alimtalk.send({
  templateCode: 'PROMO_SUMMER_2026',
  scheduleType: 'SCHEDULED',
  at: '2026-09-01 09:00:00',
  contacts: [{ contact: '01012345678', var1: 'Autumn 30% off' }],
});
```

### Python

```python
client.alimtalk.send(
    template_code="PROMO_SUMMER_2026",
    schedule_type="SCHEDULED",
    at="2026-09-01 09:00:00",
    contacts=[{"contact": "01012345678", "var1": "Autumn 30% off"}],
)
```

### PHP · Laravel

```php
<?php

$sendgo->alimtalk->send([
    'templateCode' => 'PROMO_SUMMER_2026',
    'scheduleType' => 'SCHEDULED',
    'at'           => '2026-09-01 09:00:00',
    'contacts'     => [['contact' => '01012345678', 'var1' => 'Autumn 30% off']],
]);
```

### Scheduling a text message

The same fields apply.

```bash
curl -X POST https://sendgo.io/api/v2/messages/send \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "campaignType": "MESSAGE",
    "messageType": "LMS",
    "scheduleType": "SCHEDULED",
    "at": "2026-09-01 09:00:00",
    "subject": "[Notice] Scheduled maintenance",
    "content": "Maintenance on 1 Sep, 02:00-06:00 KST.",
    "contacts": [{ "contact": "01012345678" }],
    "senderKey": "your_sms_sender_key"
  }'
```

## The timezone trap

Servers commonly run in UTC — Docker containers, default AWS setups. **Check that whatever builds the timestamp uses KST.** A UTC time passed straight through sends nine hours early.

```php
<?php

// Wrong — on a UTC server this actually means 18:00 KST.
'at' => now()->addDay()->setTime(9, 0)->format('Y-m-d H:i:s'),

// Right
'at' => now('Asia/Seoul')->addDay()->setTime(9, 0)->format('Y-m-d H:i:s'),
```

```python
from datetime import datetime
from zoneinfo import ZoneInfo

at = datetime.now(ZoneInfo("Asia/Seoul")).replace(hour=9, minute=0, second=0)
client.alimtalk.send(
    template_code="PROMO_001",
    schedule_type="SCHEDULED",
    at=at.strftime("%Y-%m-%d %H:%M:%S"),
    contacts=[...],
)
```

```typescript
// Format explicitly in KST rather than trusting the server's zone.
const at = new Intl.DateTimeFormat('sv-SE', {
  timeZone: 'Asia/Seoul',
  year: 'numeric', month: '2-digit', day: '2-digit',
  hour: '2-digit', minute: '2-digit', second: '2-digit',
  hour12: false,
}).format(target).replace('T', ' ');
```

## Interaction with the night ban

Promotional messages cannot be delivered between 21:00 and 08:00 KST, judged on the **actual send time**. Do not schedule into that window.

The combination that bites: an evening batch that computes "three hours from now" can land inside the restricted window depending on when it ran. Use absolute times, or push into the next morning.

```php
<?php

$at = now('Asia/Seoul')->addHours(3);

// Inside 21:00-08:00? Move it to the next morning.
if ($at->hour >= 21 || $at->hour < 8) {
    $at = $at->copy()->addDay()->setTime(8, 0);
}
```

Full rules: [Advertising message rules](/en/cookbook/ad-message-rules).

## Next

- [Bulk sending and per-recipient variables](/en/cookbook/bulk-send)
- [Advertising message rules](/en/cookbook/ad-message-rules)