Core Concepts
A deeper look at the terms introduced in Quick Start.
1. API
A communication protocol for exchanging data between programs.
In 3Min API:
- Create APIs without backend code
- Receive standard JSON data
- Data is automatically stored and can be forwarded via webhooks
2. Endpoint
The API address that receives data. One API = one endpoint.
Each endpoint includes:
- Unique URL path (auto-generated)
- Required fields (optional)
- Sandbox/Production environment separation
- Environment-specific API keys (
tm_test_xxx...,tm_live_xxx...)
3. JSON
3Min API accepts standard JSON data.
Supported field types:
| String | Text | Example |
|---|---|---|
| string | Text | "hello" |
| number | Numbers | 123, 45.67 |
| boolean | True/false | true, false |
| array | Lists | [1, 2, 3] |
| object | Nested data | {"key": "value"} |
Example (order info):
{
"order_id": "ORD-2024-001",
"amount": 45000,
"items": ["Item A", "Item B"],
"paid": true,
"customer": {
"name": "John Doe",
"phone": "010-1234-5678"
}
} 4. Required Fields (Optional)
Standard JSON is accepted even without defining required fields.
You can specify fields that must be included in JSON data.
With required fields:
- Requests missing required fields are rejected (400 error)
- Ensure data quality
5. Sandbox vs Production
| Environment | API Key | Purpose |
|---|---|---|
| Sandbox | tm_test_xxx... | Development and testing |
| Production | tm_live_xxx... | Live service |
- Environment is determined by API key prefix
- Webhooks can be configured separately per environment
- Test thoroughly in Sandbox before deploying to Production
6. API Key
Used for authentication when calling endpoints. The owner's default API key is automatically generated when the endpoint is created and cannot be deleted. If the key is compromised, it can be regenerated.
| API Key | Environment | Purpose |
|---|---|---|
tm_test_xxx... | Sandbox | For testing, no impact on production |
tm_live_xxx... | Production | For live service, processes real data |
Regenerate API keys immediately if exposed.
Collaboration Keys
Create collaboration keys and invite collaborators to manage logs and statistics separately per collaboration key.
Filter logs by collaboration key to track usage per collaboration key.
Set allowed operations (POST/GET/PUT/DELETE) per collaboration key, independently for each environment. Read permission covers single GET, GET (list), and GET (search) alike.
7. Webhooks
Automatic notifications sent to a specified URL when data arrives.
Two types of webhooks:
| Webhook | Configured in | Description |
|---|---|---|
| Owner webhook | Dashboard → APIs → Endpoint detail | Receive all API call notifications |
| Collaborator webhook | Request headers when calling API | Collaborator receives processing results directly |
Retry policy: return 2xx within 15s. On failure, delivery is retried from a queue over hours
Note: Even if all webhook retries fail, your data is still stored safely. Check webhook status in the logs.
8. Polling
The other way to receive data. Instead of us calling your URL, your client calls the polling endpoint on a loop and gets back only what arrived since its last call.
Webhook or polling:
| Aspect | Webhook (push) | Polling (pull) |
|---|---|---|
| Who initiates | 3Min API calls you | Your client calls us |
| Requires | A publicly reachable URL that answers within 15 seconds | Nothing inbound — only outbound HTTPS |
| Latency | Seconds after the record is stored | One poll interval, plus a settle delay of about 60 seconds |
| Cost | Free — deliveries are not counted as API calls | One API call per poll request, empty ones included |
Pick webhook when the receiver has a public URL and should react as soon as data arrives. This is the default.
Pick polling when there is no public URL — local development, an internal network, behind a firewall, no always-on server — or when the receiver needs to control its own pace.
They are not exclusive. Both can be on for the same endpoint: a webhook for real-time reaction, plus a nightly poll that backfills anything the receiver missed.
Example request:
# First call - since a point in time
GET /api/v1/data/my-endpoint/poll?since=2026-09-01
Authorization: Bearer tm_test_xxx
# Response - oldest first
{
"success": true,
"data": [ ... ],
"pagination": {
"limit": 100,
"poll_cursor": "eyJ0IjoiMjAyNi0wOS0wMVQwMDowMDowMFoifQ"
}
}
# Next call - send the cursor back
GET /api/v1/data/my-endpoint/poll?cursor=eyJ0IjoiMjAyNi0wOS0wMVQwMDowMDowMFoifQ How the cursor works:
- The first call takes since (RFC 3339 or YYYY-MM-DD, always read as UTC), or nothing at all, which subscribes from that moment on. since and cursor cannot be sent together.
- next_cursor means a backlog remains — call again right away
- poll_cursor means you are caught up — save it and wait for your next cycle
- Records come oldest first, up to 100 per page (limit, 1-100). Every response carries exactly one of the two cursors
The newest 60 seconds or so are held back while the queue catches up, so a record is deferred to a later poll rather than skipped. Retries and restarts can redeliver a record, so process idempotently on the record id.
9. Data Retention
Records are kept for a limited time, so treat the webhook or the polling endpoint — not the dashboard — as the way your data leaves 3Min API.
Policy by environment:
| Environment | Policy | Notes |
|---|---|---|
| Production (paid plans) | Kept at least 60 days | Removed a whole month at a time once past the retention window |
| Sandbox (paid plans) | Auto-deleted after 30 days | Test data, not storage |
| Free plan | Fully deleted 7 days after endpoint creation | Deleted per endpoint |
Getting your data out:
- Webhook: every record is pushed to your URL as it arrives
- Polling: pull whatever arrived since your last call — see section 8 above
- Logs: look up or search individual records in the dashboard while they are retained
- Usage statistics are kept separately and survive record deletion, so your dashboard charts stay intact