# Access and support

## Get access

To connect your salon app, book a technical call on [beautyrouter.com/contacts](https://beautyrouter.com/contacts/).
Beauty Router then creates your salon app and gives you access to the salon app admin area. There you set up your
integration:

- Generate your [app tokens](/authentication/#app-token). You can have several at once and limit the lifetime of each, so
  you can [rotate them](/authentication/#rotate-a-token) with no downtime. Keep them on your server.
- Add the [origins](/embedded-marketplace/#before-you-start) where your salon app shows the marketplace or calls the API.
- Set your [webhook URL](/webhooks/#your-webhook-url), and generate a webhook secret. You can have several at once and
  limit the lifetime of each, so you can [rotate them](/webhooks/#rotate-a-secret) with no downtime.
- Set your app's name, logo, and accent color, for the [emails](/emails/) to your users.
- Set the [URL templates](/emails/#url-templates) that the links in those emails open.
- Set the short form of your app's name for [card statements](/orders/#card-statements).
- [Send the emails from your own domain](/emails/#send-from-your-own-domain), if you want to.
- Select your [interface design](/features/#customize-the-interface), if Beauty Router created one for your salon app.
- Add a developer email, a Slack webhook, or both, to hear about [integration errors](#integration-errors).
- Limit your app tokens to [allowed IP addresses](/authentication/#allowed-ip-addresses).

Login works once the required settings are in place: your app's name, at least one origin, your webhook URL and secret,
and all four URL templates. Until then, `POST /v1/login` fails with `app_setup_incomplete`, and the admin area shows
what is missing. Your logo, your accent color, the card statement name, the sending domain, the interface design, the
developer email, the Slack webhook, and the allowed IP addresses are optional.

## Sandbox and production

Most settings are separate for the sandbox and production. Each environment has its own salon app admin area, so you set
up your integration in each one: app tokens, origins, webhook URL and secrets, email settings, URL templates, interface
design, developer email, Slack webhook, and allowed IP addresses. A change in the sandbox does not reach production, and each environment needs its own required settings before
login works there.

Build and test in the sandbox, then repeat the setup in production when you go live. See
[Environments](/authentication/#environments).

## Integration errors

Beauty Router records the errors in your integration, so you can find them without searching your own logs. It does not
record successful requests.

- **What is recorded.** API requests that failed, webhook deliveries that failed, and requests refused by your
  [allowed IP addresses](/authentication/#allowed-ip-addresses). Each entry has the time, the endpoint or event, the
  status, the error code, the message, and the request ID. Entries never hold request bodies or tokens. Normal outcomes
  are left out, such as an expired user token, or an email address the user needs to fix. A browser that CORS refuses
  never reaches Beauty Router, so a missing origin is not recorded.
- **Where you see them.** The salon app admin area lists the errors of the last 30 days. You can filter them by date,
  kind, and error code. Each error links to its section in [Errors](/errors/).
- **Notifications.** Add a developer email, a Slack incoming webhook URL for the channel you choose, or both. Beauty Router
  sends a message for errors from your server, server errors on its side, webhook failures, refused addresses, and
  [app tokens used from a new network](/authentication/#new-networks). Repeats
  of the same error are combined into one message an hour, with a count, so an outage does not flood your inbox. Errors
  from your users' requests, such as a wrong file type, stay in the list with no message.

## Technical questions

Send technical questions to [dev@beautyrouter.com](mailto:dev@beautyrouter.com). Write to the same address if you need
an endpoint the API does not have.

## Version

This documentation describes version 1.1.17. The [introduction](/) lists what it covers.