# Quickstart

You create your first item in the console, you retrieve its QR code, and you check that it answers publicly, first in a browser and then from the command line.

Source: https://docs.sealtrust.io/en/demarrage-rapide/

---

At the end of this walkthrough, you have an item created, its QR code downloaded, and a
public address that answers whoever scans it. Everything happens in the console of your
brand. The first four steps require no code. The fifth repeats the same check from the
command line.

Every step ends with a check. If a check fails, do not move on to the next one: the
section [What can stop you](#what-can-stop-you) gives the exact server response for the
most common refusals.

> [!INFO] What you need
> An administrator account on the console of your brand, and a browser. Nothing to
> install.

## 1. Open the console

Go to `https://admin.sealtrust.io` and sign in with the email address and password of your
account.

**Check.** The left sidebar shows "Getting Started", "Catalog" and "Settings".

## 2. Create your first item

In the sidebar, open "Catalog", then "Create product". Stay on the "Single product" tab.

Three fields are required:

- **Product name.** The text the customer will see.
- **Brand.** It is prefilled and locked if your account manages only one. It shows the name
  followed by the identifier of the brand in parentheses, for example `Exemple SAS (#12)`.
- **Category.** To be chosen from the dropdown list.

The "Product model (optional)" field can stay empty.

Below those fields, the "Authentication:" row offers three positions: NFC, QR, NFC + QR.
Choose **QR**, then click "Create".

> [!INFO] QR and NFC
> QR is a full-fledged identification mode. If you choose NFC or NFC + QR, the item is not
> minted right away: it goes to the chip encoding step, which requires a physical chip and
> a reader. For this walkthrough, stay on QR.

The "Preview what will be written on-chain" button shows, before creation, what will be
written. This is the last moment when something can be corrected.

**Check.** A green banner shows "Product(s) created successfully!", the name you entered, a
"QR" badge and the words "Minting in progress on blockchain...". The latter means that the
minting has been started in the background.

## 3. Open the item record

Click "View products". The minting happens in the background. The item appears in the list
as soon as its blockchain transaction has been sent, so refresh the page if the list does
not show it yet. Then click its row to open its record.

**Check.** The record shows a "Blockchain" block with the contract, the "Tx Hash" and "Mint
date", which carries the date of the minting. The "Token ID" row carries no value yet: it
fills in when the transaction is confirmed on chain, which takes a moment longer. Further
down, a "QR Code" block shows the image of the code, a "Download QR (PNG)" button and the
row that gives the verification URL.

## 4. Open the verification URL

Copy the value shown on that row. It ends with
`/p/` followed by the serial number of the item, twelve uppercase characters:

```text
.../p/DEM000000000
```

The serial number is drawn at random at creation. Its alphabet leaves out the letters I, L,
O and U, so that no character can be confused with a digit when a person reads a label
back.

This is exactly what the printed QR code encodes. Copy the whole value as it is displayed,
host included. Do not retype it from memory.

Open the address in a browser, in a private window, to see what a customer sees.

**Check.** The address leads to the public page of the item, which shows its name and its
brand. No account is asked for.

> [!ATTENTION] What does not appear yet
> An item that has just been created has neither a certificate nor a passport. The link to
> the certificate appears on this page only once the certificate is issued, and the link to
> the passport only once the passport is published. Both are done from the console, later.

## 5. Verify through the public API

The same check, without a browser. This endpoint requires no authentication. Replace
`DEM000000000` with the serial number you noted at step 4.

:::onglets
```bash title="curl"
curl "https://api.sealtrust.io/v1/resolve/DEM000000000"
```
```typescript
const identifiant = "DEM000000000";

const reponse = await fetch(
  `https://api.sealtrust.io/v1/resolve/${encodeURIComponent(identifiant)}`,
);

const donnees = await reponse.json();
console.log(reponse.status);
console.log(donnees.product_name, "-", donnees.brand_name);
```
```python
import requests

reponse = requests.get(
    "https://api.sealtrust.io/v1/resolve/DEM000000000",
    timeout=30,
)
print(reponse.status_code)
print(reponse.json()["product_name"], "-", reponse.json()["brand_name"])
```
:::

**Check.** The response is a 200. It carries `product_name` and `brand_name`, which repeat
what you entered at step 2, as well as `uid_hash`, `contract_address` and `tx_hash`. The
`token_id` field stays null until the transaction is confirmed, like the "Token ID" row at
step 3. The `certificate` and `passport` fields are null, and `media` and `events` are empty
lists, as long as nothing fills them. An unknown identifier answers 404 with the message
`Product not found`.

This endpoint accepts four forms of identifier: the printed serial number, the token
identifier, the item hash (`0x` followed by 64 hexadecimal characters) and a certificate
number. It is capped at 60 calls per minute and per calling address.

Your first item is verifiable. The walkthrough is complete.

## What can stop you

| Response | What happened | What to do |
| --- | --- | --- |
| The "Create" button stays grayed out | The product name, the brand or the category is not filled in. All three are required. | Fill in the three fields. The button then becomes active. |
| 403, detail `{"code": "AUTH_METHOD_NOT_ALLOWED", "allowed": "qr"}` | You chose NFC or NFC + QR, and your plan allows QR only. The detail gives the method requested and the ones your plan allows. The four plans of the catalog allow NFC: today this refusal touches only the accounts that stayed on an older plan limited to QR. | Choose QR for this walkthrough, or contact us to open NFC on your plan. |
| 403, detail `{"code": "QUOTA_EXCEEDED", "resource": "products", "period": "monthly", ...}` | The creation would exceed the number of items your plan allows for the month. The detail gives the current count, the quantity requested and the maximum. | Wait for the next period or have the cap raised. |
| 403 `Brand must have an active plan` | No plan is attached to this brand. | Contact us to attach a plan. |
| 404 `Product not found` at step 5 | The identifier sent matches no item. Most often, the serial number was retyped instead of being copied. | Copy back the value shown on the item record. |
| 429, body `{"detail": "Rate limit exceeded: 60 requests per 60s"}` | You exceeded 60 calls per minute on the public endpoint of step 5. | Wait the number of seconds given by the `Retry-After` header. |

The responses that go through also carry the `X-RateLimit-Limit`,
`X-RateLimit-Remaining` and `X-RateLimit-Reset` headers: you can slow down before reaching
the cap.

## And through the partner API

The partner API has been creating items since August 21, 2026.
`POST /v1/partner/mint/batch` takes a batch of rows, in JSON or in CSV, up to
500 rows per call. It answers 200 with a batch identifier, and the processing creates the
items in the background. You follow the progress with
`GET /v1/partner/mint/batch/status/{job_id}`. Both calls require the
`mint:batch` scope on your API key.

Two points to know before writing your integration.

- A batch row carries five fields, and only five: `product_name`,
  `brand_id`, `category_id`, `metadata_uri`, and `external_ref`, which is
  optional. Any other field makes the request fail with a 400.
- This path produces QR items only. The server sets the identification method and the
  technical identifier of the item itself, and a batch row cannot carry them. For NFC
  items, go through the console.

The endpoint is still described field by field, with its authorizations, its caps and the
list of its errors, on its reference page,
[POST /partner/mint/batch](/en/reference/post-partner-mint-batch/).

## What comes next

- [Core concepts](/en/notions/): what product, model, batch, item, certificate,
  passport and seal cover.
- [Create products](/en/creer-des-produits/): creation one at a time and in batches
  from the console, CSV file included.
- [GET /resolve/{identifier}](/en/reference/get-resolve/): the complete reference for the
  endpoint used at step 5.
- [POST /partner/mint/batch](/en/reference/post-partner-mint-batch/): the complete
  reference for the endpoint described just above.
- [Partner API, overview](/en/api-vue-ensemble/): creating an API key,
  authentication and call caps.
- [Physical identification](/en/identification-physique/): what the QR code and the NFC
  chip each bring.
