---
title: Documentation
description: Coinetic developer docs for the crypto payment API: quickstart, request signing, invoices, hosted checkout, webhooks, refunds and the sandbox.
url: https://coinetic.money/docs/
lang: en
---

# Coinetic documentation

Everything you need to accept crypto on your website, app or bot. The integration is two API calls and one webhook handler.

- [Quickstart](https://coinetic.money/docs/quickstart/) — Your first test payment in 15 minutes: invoice, redirect, webhook.
- [Client libraries](https://coinetic.money/docs/sdks/) — Node.js, PHP, Python, Go: a single file with no dependencies.
- [Webhooks](https://coinetic.money/docs/webhooks/) — Events, signatures, retries and delivery order.
- [Go-live checklist](https://coinetic.money/docs/go-live/) — What to check before accepting real money.

## How a payment works

`payment flow`

```
 Your server                     Coinetic                           Customer
 ───────────                     ────────                           ────────
 1. POST /v1/invoices  ────────▶ creates the invoice, returns checkout_url
 2. redirect to checkout_url ─────────────────────────────────────▶ checkout page
                                 3. customer picks a currency ◀──── (USDT, USDC, BTC…)
                                    and pays to the issued address
                                 4. the network confirms the payment
 5. invoice.paid webhook ◀────── POST to your URL (HMAC-signed)
 6. GET /v1/invoices/{id} ─────▶ re-check the status
 7. fulfill the order
                                 8. “Return to store” ─────────────▶ your return_url
```

## Four rules

- **Your API key secret stays on your server.** Never in the browser, a mobile app or git.
- **Payment status comes only from Coinetic.** Don't trust `return_url` parameters, and don't take a webhook at its word: verify the signature, then re-check the status via `GET /v1/invoices/{id}`.
- **Money is a string.** Amounts arrive as decimal strings (`"49.99"`) or as strings in the smallest units (`"49990000"`). Never convert them to floats.
- **Every mutating request carries an `Idempotency-Key`.** Retrying after a timeout returns the same invoice instead of creating a second one.

## Base URLs

| Environment | API | Dashboard |
| --- | --- | --- |
| Production | `https://pay.coinetic.money` | [https://dash.coinetic.money/merchant](https://dash.coinetic.money/merchant) |
| Sandbox | `https://sandbox.coinetic.money` | [https://sandbox.coinetic.money/merchant](https://sandbox.coinetic.money/merchant) |

All responses are UTF-8 JSON; timestamps are RFC 3339 in UTC. The full formal contract is an OpenAPI 3 spec (`openapi.yaml`): request it from support or in the dashboard.

## All merchant endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/v1/invoices` | [Create an invoice](https://coinetic.money/docs/invoices/) |
| GET | `/v1/invoices/{id}` | Invoice, payments, confirmations |
| GET | `/v1/invoices` | List invoices with filters and a cursor |
| GET | `/v1/assets` | Available assets and minimum amounts |
| GET | `/v1/rates` | Reference rate (exchange consensus) |
| POST | `/v1/refunds` | [Request a refund](https://coinetic.money/docs/refunds/) |
