---
title: "Add an iMessage sandbox contact"
method: POST
path: "/v1/imessage/sandbox/contacts"
tags: ["iMessage"]
---

# Add an iMessage sandbox contact

`POST /v1/imessage/sandbox/contacts`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/imessage/sandbox/contacts`
- Auth: HTTP bearer

Adds your own phone (E.164) or Apple ID email. The contact starts as pending; it becomes active when its joinText arrives at the sandbox line from that handle (joinLink opens Messages with it prefilled). Adding a handle that is already on your list returns it unchanged.

## Request body

- object
  - `handle` string, required: Phone in international format (+15551234567) or an Apple ID email

## Response `201`

Contact added

- object
  - `contact` ImessageSandboxContact
    - `id` string
    - `handle` string: Phone (E.164) or lowercase Apple ID email
    - `status` 'pending' | 'active'
    - `joinText` string: Send this from the handle to the sandbox line to activate it
    - `joinLink` string: Opens Messages on the sandbox line with joinText prefilled
    - `activatedAt` string, date-time, nullable
    - `lastInboundAt` string, date-time, nullable: Replies are allowed for 24 hours after this
    - `createdAt` string, date-time

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `403`: Your plan does not include the inbox
- `404`: The sandbox is not available right now
- `409`: Contact limit reached, or the handle is on someone else's sandbox list

## Changes

- **2026-10-06** `f8c8f34fb41a`: 2 warning
  - added the new `account` enum value to the `details/budgetScope` response property for the response status `400`
  - added the new `account` enum value to the `details/budgetScope` response property for the response status `401`
- **2026-10-02** `d556591af3f6`: 8 info
  - added the optional property `code` to the response with the `401` status
  - added the optional property `details` to the response with the `401` status
  - added the optional property `docUrl` to the response with the `400` status
  - added the optional property `docUrl` to the response with the `401` status
  - …4 more
- **2026-09-30** `16a7b9d5373e`: 1 info
  - removed the `platform` enum value from the `details/budgetScope` response property for the response status `400`
- **2026-09-29** `69bbe3da3a18`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/imessage/sandbox/contacts/post.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/1ba71fcdcb0d?raw)
