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:

StringTextExample
stringText"hello"
numberNumbers123, 45.67
booleanTrue/falsetrue, false
arrayLists[1, 2, 3]
objectNested 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

EnvironmentAPI KeyPurpose
Sandboxtm_test_xxx...Development and testing
Productiontm_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 KeyEnvironmentPurpose
tm_test_xxx...SandboxFor testing, no impact on production
tm_live_xxx...ProductionFor 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:

WebhookConfigured inDescription
Owner webhookDashboard → APIs → Endpoint detailReceive all API call notifications
Collaborator webhookRequest headers when calling APICollaborator 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:

AspectWebhook (push)Polling (pull)
Who initiates3Min API calls youYour client calls us
RequiresA publicly reachable URL that answers within 15 secondsNothing inbound — only outbound HTTPS
LatencySeconds after the record is storedOne poll interval, plus a settle delay of about 60 seconds
CostFree — deliveries are not counted as API callsOne 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:

EnvironmentPolicyNotes
Production (paid plans)Kept at least 60 daysRemoved a whole month at a time once past the retention window
Sandbox (paid plans)Auto-deleted after 30 daysTest data, not storage
Free planFully deleted 7 days after endpoint creationDeleted 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