# RIAL > Prove a photo is real. Developer documentation for the RIAL API, CLI and native SDKs. - [RIAL developer docs](https://docs.get-rial.com/index.md): Prove a photo is real. - [Quickstart](https://docs.get-rial.com/quickstart.md): Two API calls to your first verdict. - [Authentication](https://docs.get-rial.com/authentication.md): One key for your server, one for your apps. - [Verdicts](https://docs.get-rial.com/verdicts.md): What comes back, and what to do with it. - [CLI](https://docs.get-rial.com/cli.md): RIAL from your terminal. - [Kotlin SDK](https://docs.get-rial.com/sdks/kotlin.md): Capture inside your Android app. - [Swift SDK](https://docs.get-rial.com/sdks/swift.md): Capture inside your iOS app. - [React Native SDK](https://docs.get-rial.com/sdks/react-native.md): Capture inside your React Native app. - [List verifications](https://docs.get-rial.com/api-reference/verifications/list-verifications.md): Newest-first list, opaque-cursor paginated. `next_cursor` from the previous page round-trips back as `?cursor=`; absent means the list is exhausted. - [Create a verification](https://docs.get-rial.com/api-reference/verifications/create-a-verification.md): Mints a verification the tenant's end-user redeems by submitting content against the returned `capture_url`. The configuration (capture spec, required fraud signals, optional tenant `context`, optional `webhook_url`, optional `notify_email`) is immutable after issue — to change anything, issue a new… - [Get a verification](https://docs.get-rial.com/api-reference/verifications/get-a-verification.md): Returns the verification and every capture submitted against it (inlined). Capture `image_url` fields are presigned with a 1-hour TTL — the dashboard can drop them into `` with no auth handshake. The S3 bucket policy itself stays private. - [Get the share-safe result](https://docs.get-rial.com/api-reference/verifications/get-the-share-safe-result.md): No auth required. Returns a **narrower** projection than `/v1/verifications/:id` — strips operator-only fields (attestation, telemetry, internal capture metadata). Audience is the public reader of `rial.io/v/:id` confirming a completed verification certificate. - [Get the event log](https://docs.get-rial.com/api-reference/verifications/get-the-event-log.md): Every domain event the worker recorded against this verification, in chronological order. Powers the dashboard "Audit timeline" card. Read-only. - [Finalize with a narrative](https://docs.get-rial.com/api-reference/verifications/finalize-with-a-narrative.md): Attaches the claimant's written `narrative` to the verification and closes the case. The narrative is an operator surface: it is stored and returned on the operator audience, never on the developer (API-key) one. - [List templates](https://docs.get-rial.com/api-reference/templates/list-templates.md): Newest-first list of the tenant's published templates, each with live `started_total` / `started_today` counters. - [Publish a template](https://docs.get-rial.com/api-reference/templates/publish-a-template.md): Creates the template and its public link in one step — the link starts `active` (unless `status: "paused"` is sent) at `/l/{token}` — `public_url`, whose single path segment is a compact JWT carrying the org and template slugs (the legacy `/l/{org}/{slug}` keeps resolving). The published snapshot st… - [Delete a template](https://docs.get-rial.com/api-reference/templates/delete-a-template.md): Deletes the record and frees the slug. The public link starts returning 404 immediately; verifications already minted from it are untouched. - [Update a template](https://docs.get-rial.com/api-reference/templates/update-a-template.md): Partial update. Two classes of field behave differently (GET-83): - [Preview a CSV import](https://docs.get-rial.com/api-reference/templates/preview-a-csv-import.md): Dry-run of `POST /v1/link-templates/{slug}/import` (GET-69/B6): parses the CSV, reports the resolved column mapping, row counts and per-row problems. Persists NOTHING — no job, no file, no worker trigger. The dashboard always calls this before submit so a bad file (wrong column, typo'd header) is ca… - [Import a CSV](https://docs.get-rial.com/api-reference/templates/import-a-csv.md): Validates, persists an `ImportJob` + the raw CSV, and triggers the background worker — the 202 is a receipt, not a result: ZERO verifications are minted in this request. Poll `GET /v1/link-templates/imports/{jobId}` for progress. - [Check an import](https://docs.get-rial.com/api-reference/templates/check-an-import.md): Progress of an async CSV import: `processing` → `completed` | `failed` | `aborted`, with bounded per-row errors (`invalid_rows` is capped at import time so this response never grows unbounded). - [Simulate a template](https://docs.get-rial.com/api-reference/templates/simulate-a-template.md): Mints ONE verification from the template's current snapshot, flagged `simulation: true` — the async capture→worker→verdict pipeline runs for real, but the run is excluded from billable side effects: it does NOT count toward `GET /v1/me/usage` and does NOT fire tenant notifications. - [List your databases](https://docs.get-rial.com/api-reference/databases/list-your-databases.md): Newest-first, each with its full `columns` + `rows` — callers can preview checks and seed batch imports without a per-cell round trip. The rows are tenant PII and never reach public verification reads. - [Create a database from rows](https://docs.get-rial.com/api-reference/databases/create-a-database-from-rows.md): The body carries the ALREADY-PARSED table (`columns` + `rows`); the dashboard parses and previews the CSV client-side. Limits: 5000 rows, 60 columns, 500 chars per cell, 1 MB total. - [Replace a database's rows](https://docs.get-rial.com/api-reference/databases/replace-a-databases-rows.md): Swaps the table WHOLE (name + columns + rows) under the same id — template bindings point at the id, so a re-upload must never rotate it. Bindings reference columns by NAME: a re-upload that keeps a column's name keeps every check pointed at it. - [Rename a database](https://docs.get-rial.com/api-reference/databases/rename-a-database.md) - [SDK license](https://docs.get-rial.com/legal/sdk-license.md): License terms governing the RIAL Kotlin and Swift SDKs. ## OpenAPI Specs - [openapi](/api-reference/openapi.json)