# Add a participant to an order

```http
POST https://secure.yoprint.com/v1/api/store/{team_slug}/sales_order/{hash_id}/participant
```

- API version: v1
- Operation ID: `v1_public_sales_order_participant_store`
- Section: Sales › [Sales order messages](https://developer.yoprint.com/reference/sales-order-messages.md)
- Web page: https://developer.yoprint.com/reference/sales-order-messages/v1-sales-order-participant-store/
- Authentication: `Authorization: Bearer YOUR_API_KEY`

Participants are the people who can receive an order's messages: contacts of the customer, or guests with just an email address. Each has its own email and text message switches and a `status` (`all` by default). A message goes to the participants you list in it: by email to everyone listed who has an email address, whatever the switches or status; by text only to those with `can_receive_sms` and status `all` or `message`. Every id in a message must be a current participant of that order, or the message is refused (see Send a message to the customer).

Adds one participant. Send `type: "contact"` with a `contact_id`, or `type: "guest"` with an `email`. The answer is the participant; use its `id` in messages. `{hash_id}` is the order's `id` (for example `V4keXwwxMQyXw7`); the `ord_` unique key is not accepted here.

## Permission

Any member of the team.

## Business rules

- `contact_id` is required for `contact`, `email` for `guest`.
- `can_receive_mail` and `can_receive_sms` are required.

## Side effects

- Sends nothing.

## Path parameters

- `team_slug` (string, required): Your team slug, shown as Team ID next to your API key in Profile. Example `your-team`.
- `hash_id` (string, required): The sales order's or quote's `id` (a hash id). The `ord_` unique key and the order number do not work here. Example `V4keXwwxMQyXw7`.

## Request body

Content type `application/json`, required.

Fields:

- `can_receive_mail` (boolean, required): Whether they get messages by email.
- `can_receive_sms` (boolean, required): Whether they get text messages.
- `type` (string, required): `contact` for one of the customer's contacts, `guest` for anyone else. One of: `"contact"`, `"guest"`.
- `contact_id` (string, optional): Required for `contact`: the contact's `id`.
- `email` (string (email), optional): Required for `guest`.
- `name` (string, optional): The guest's name.
- `status` (string, optional): Default `all`. One of: `"all"`, `"message"`, `"notification"`, `"disabled"`.

### Example request

```bash
curl -X POST 'https://secure.yoprint.com/v1/api/store/your-team/sales_order/V4keXwwxMQyXw7/participant' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Accept: application/json' \
  -H 'X-Yoprint-Decimal-Format: exact-v1' \
  -H 'Content-Type: application/json' \
  -d '{
    "can_receive_mail": true,
    "can_receive_sms": false,
    "contact_id": "7fobq9tQvOi5EG",
    "status": "all",
    "type": "contact"
  }'
```

Another example: A guest:

```bash
curl -X POST 'https://secure.yoprint.com/v1/api/store/your-team/sales_order/V4keXwwxMQyXw7/participant' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Accept: application/json' \
  -H 'X-Yoprint-Decimal-Format: exact-v1' \
  -H 'Content-Type: application/json' \
  -d '{
    "can_receive_mail": true,
    "can_receive_sms": false,
    "email": "alex@example.com",
    "name": "Alex Rivera",
    "type": "guest"
  }'
```

## Response

`200` Successful response.

Fields:

- `data` (object, required): A participant.
  - `id` (string, required): The participant id that messages use.
  - `status` (string, required): `all`, `message`, `notification` or `disabled`.
  - `can_receive_mail` (boolean, optional)
  - `can_receive_sms` (boolean, optional)
  - `contact_id` (string | null, optional): Set for contacts; null for guests.
  - `email` (string | null, optional)
  - `name` (string | null, optional)
  - `order_id` (string | null, optional)
  - `phone` (string | null, optional)
  - `trashed` (boolean, optional)
  - `type` (string | null, optional): `contact` or `guest`.
- `status` (integer, required)
- `success` (boolean, required)

Example response:

```json
{
  "data": {
    "can_receive_mail": true,
    "can_receive_sms": false,
    "contact_id": "7fobq9tQvOi5EG",
    "email": "alex@example.com",
    "id": "LBbXMRNWVof2bd",
    "name": "Alex Rivera",
    "order_id": "V4keXwwxMQyXw7",
    "phone": null,
    "status": "all",
    "trashed": false,
    "type": "contact"
  },
  "status": 200,
  "success": true
}
```

## Errors

- `401` The API key is missing or wrong (`unauthenticated`).
- `403` You are not allowed to do this. `api_access_not_in_plan`: your team's plan doesn't include API access (Pro and above, with an active subscription or trial), so every request answers this until the team upgrades. When your role lacks the permission the operation needs, the body is only `{"message": "Insufficient Permission"}`. Other refusals use the error envelope, with `unauthorized` or `user_is_not_authorized`.
- `404` Not found. `page_not_found`: the team slug is unknown, you are not a member of the team, or an id in the path is not one of this team's. `code: null`, with a message that starts "No query results for": there is no record with that id.
- `422` The request was refused and changed nothing. `validation_failed` lists what to fix in `error.fields`; other codes name a business rule, explained in `error.message`. A few checks answer with only `{"message": "..."}`. An operation that calls another service (a payment provider, a carrier, an accounting app) can answer `connect_timeout` ("Please retry again") when that service does not answer in time: the change may or may not have happened there, so read the record back before you retry.
  - When: A required field is missing or the email is not valid. Fix: Send the fields for the chosen `type`.

## Related

- [List the participants of an order](https://developer.yoprint.com/reference/sales-order-messages/v1-sales-order-participant-index.md): `GET /v1/api/store/{team_slug}/sales_order/{hash_id}/participant`
- [Send a message to the customer](https://developer.yoprint.com/reference/sales-order-messages/v2-order-message-store.md): `POST /v2/api/store/{team_slug}/v2/sales_order/{hash_id}/message`
- [List a customer's contacts](https://developer.yoprint.com/reference/customer-contacts/v1-customer-contact-index.md): `GET /v1/api/store/{team_slug}/customer/{hash_id}/contact`
