# Quickstart > https://docs.errora.org/en/getting-started/quickstart Five minutes from zero to a captured exception. ## 1. Sign in Errora authenticates with an **Iranian mobile number** (`09XXXXXXXXX`). 1. Open the app and go to **Sign in**. 2. Enter your mobile number. Errora answers whether the number already has an account and whether it has a password. 3. Sign in with your **password**, or with the **one-time code** sent to you over SMS. A brand-new number gets an account on first sign-in, plus a **personal organization** and **signup credit** (100,000 Toman by default). See [Authentication](/en/account/auth) for passwords, OTP and two-factor. ## 2. Create a project A **project** is one application (or one service) whose events you want kept apart. 1. Go to **Projects → New project**. 2. Give it a name and pick a platform — `javascript`, `node`, `python`, `php`, `php-laravel`, `go` or `other`. The platform only drives the icon and the setup snippet; ingestion works the same for all of them. 3. Errora creates the project and a **DSN key** for it. ## 3. Copy the DSN The DSN is shown on the project page. It is in Sentry's standard format: ```text https://@/ ``` Anything holding this DSN can send events to the project, so treat it like a write-only credential. You can create additional keys, or rotate one, from the project page — see [Projects & DSN keys](/en/account/projects-and-keys). ## 4. Install the official Sentry SDK Errora speaks the Sentry wire protocol, so you use the **official Sentry SDK** for your platform. Nothing Errora-specific gets installed. ```bash pip install sentry-sdk # Python npm install @sentry/node # Node.js npm install @sentry/browser # Browser composer require sentry/sentry-laravel # Laravel go get github.com/getsentry/sentry-go # Go ``` Point it at your DSN: ```python import sentry_sdk sentry_sdk.init( dsn="https://@/", environment="production", release="myapp@1.4.2", traces_sample_rate=1.0, # performance/tracing ) ``` Full per-platform guides: [SDK setup](/en/platforms/overview). ## 5. Send a test event Trigger an exception on purpose: ```python sentry_sdk.capture_exception(Exception("Hello from Errora")) ``` Or, without any SDK, `curl` the store endpoint directly: ```bash curl -X POST "https:///api//store/" \ -H "Content-Type: application/json" \ -H "X-Sentry-Auth: Sentry sentry_version=7, sentry_key=" \ -d '{ "event_id": "'"$(uuidgen | tr -d - | tr "A-Z" "a-z")"'", "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'", "platform": "other", "level": "error", "exception": {"values": [{"type": "SmokeTest", "value": "Hello from Errora"}]} }' ``` The endpoint answers `202 Accepted` immediately — grouping happens right after, so the event appears in the UI a moment later. ## 6. See it in the UI Open **Issues**. Your exception is there, grouped by type and stack trace, with `times_seen`, first/last seen, the stack trace, breadcrumbs, request context and tags. If nothing arrives: | Symptom | Likely cause | | --- | --- | | `401` from the ingest endpoint | Wrong or disabled DSN key, or a key that belongs to a different project | | `202` but no issue after a minute | The project's sample rate is below `1.0`, so the event was not stored | | `429` with a "suspended" message | The organization's wallet is past its credit line — see [Wallet](/en/billing/wallet) | | Nothing leaves your app | The SDK never initialized — turn on its `debug` option and check for a startup error | ## Next steps - **Turn on the rest of the platform** — [tracing](/en/products/performance), [logs](/en/products/logs), [session replay](/en/products/session-replay), [profiling](/en/products/profiling), [metrics](/en/products/metrics). - **Get told when things break** — [alerts & notification channels](/en/products/alerts). - **Invite your team** — [Organizations & members](/en/account/organizations). - **Take the in-app tour** — [Product tour](/en/getting-started/product-tour).