PINGOOD TechnologyAI TOYS SUPPLIER · ODM & OEMBook a call
🌐 English

Own your recordings: send AI voice recorder audio to your own server, no app or SDK work

Data ownershipSelf-hosted uploadHTTPSAndroidSNUGOGO CB08
Updated 2026-11-12

The AI Recorder Card app for SNUGOGO CB08 can now upload every finished recording straight to an HTTPS address you choose. That means three things. You own the data: audio goes into your own server, with no vendor account. There is no app development: you don't build or modify an app or integrate an SDK, you only need one HTTPS receiving address. And you manage the recordings yourself: store them, file them by person or by card, and transcribe or analyse them with whichever AI tool you prefer.

The feature is in the Android app, version 1.1.18 and later. It is off by default, accepts HTTPS only, and keeps the access token in the phone's secure storage. It uploads recordings from the CB08 card and recordings made with the phone's own microphone. Get the app on the app download page.

Why this matters for B2B teams

If you need deeper control, such as your own app UI or live audio, the open Bluetooth protocol and SDK are still available. For teams that only want the audio in their own system, this upload setting is enough.

How to set it up in the app (8 steps)

AI Recorder Card app Settings: Upload to your server sits below App language
Settings: “Upload to your server” sits below App language.
  1. Open the app and tap Settings at the bottom.
  2. Scroll down. Below App language you will see Upload to your server.
  3. In Upload URL, enter your server address. It must start with https://, for example https://example.com/upload. If you enter http:// or an invalid address, the app shows "Only https:// URLs are allowed" or "Invalid HTTPS URL".
  4. (Optional) If your server needs authentication, enter a token in Access token. It is sent as Authorization: Bearer. Once saved, the field stays empty and shows Token saved. To replace the token, tap Clear first. The token is stored only in the phone's secure storage and is never logged.
  5. (Optional) Fill in Uploader name (up to 64 characters, for example Sales-03) and Email (optional). No sign-in is needed.
  6. Turn on Upload recordings automatically. This is the master switch: nothing is uploaded while it is off.
  7. If needed, also turn on Upload all-day segments and Upload downloaded recordings too. The second one covers recordings downloaded from the card and other recordings that are not all-day segments. These switches can only be turned on when the master switch is on and the URL is valid.
  8. Tap Test connection. The app shows "Connection OK" or "Connection failed: …". The test only checks that your server can be reached. It does not upload a recording.
Upload URL, optional access token and uploader name, upload switches and Test connection
Upload URL (example address), optional token and name, the upload switches and Test connection. The screenshot shows a finished setup; all upload switches are off by default.

What users see in the recordings list

Each recording shows one of four statuses: Queued, Uploading, Uploaded or Upload failed. Tap Retry to try a failed upload again. If the phone is offline, items stay queued and continue on their own when the network returns. After a failure the app retries with exponential backoff, starting at about 1 second and going up to about 5 minutes. Uploads that haven't finished are kept when you close and reopen the app.

Recordings list showing Upload · Uploaded on phone recordings
Upload status in the recordings list. These two are phone-only recordings, uploaded too.

For developers: what your receiving endpoint must accept

Transport. The app sends a POST to the configured URL, HTTPS only. Terminate TLS in front of your receiver. The official app sends requests through the native HTTP stack, not a WebView, so you don't need Access-Control-Allow-* headers for it. CORS only matters if a browser page on another origin calls the same URL.

HeaderRequiredNotes
AuthorizationNoBearer <token> if the user saved a token. Do not log it.
X-Device-IdYesAutomatic device identifier. May be empty if no card has been paired yet.
X-Uploader-NameYesURL-encoded uploader name. Empty if left blank.
Content-TypeYesmultipart/form-data with a client-generated boundary.

Multipart parts

Metadata fields: deviceId, uploaderName, uploaderEmail, model (for example cb08, empty for phone-only recordings), recId, startAt and endAt (ISO-8601, true UTC), durationSec, format (ogg), bytes, sha256 (lowercase hex of the exact .ogg bytes; may be empty), appVersion and tags (optional string array).

{
  "deviceId": "CB08-1234",
  "uploaderName": "Sales-03",
  "uploaderEmail": "[email protected]",
  "model": "cb08",
  "recId": "note20261110-100000",
  "startAt": "2026-11-10T02:00:00.000Z",
  "endAt": "2026-11-10T03:00:00.000Z",
  "durationSec": 3600,
  "format": "ogg",
  "bytes": 480000,
  "sha256": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
  "appVersion": "1.1.16",
  "tags": []
}

The app converts the recording's local start time to true UTC for startAt. Don't assume it is the local time with a Z added.

Success and retries. Any HTTP 2xx is success. Any other status, a redirect or a network error is a failure, and the app keeps the item in a persistent queue and retries with backoff.

Test connection. The button sends a small JSON POST (not multipart) to the same URL. It carries the same Authorization, X-Device-Id and X-Uploader-Name headers plus X-Upload-Test: 1, and the body is {"test":true,"ts":1731283200000}. Return any 2xx and the app shows "Connection OK".

Storage tips

Legacy note: app versions before 1.1.16 sent the card's raw Opus frames as {recId}.opus, with no OGG container. If you receive one, wrap it in OGG or ask the sender to re-upload from a current app.

FAQ

Do I need to build my own app or integrate the SDK to get recordings into my system?
No. There is no app development and no SDK integration. Enter your HTTPS upload URL in the app's Settings and turn on automatic upload. All you need is an HTTPS address that accepts a multipart POST. The SDK is still available if you want your own app.

Who has access to the recordings?
Recordings are sent from the phone to the server address you enter. The feature needs no vendor account or app login, and the optional name, email and token go only to your upload server.

Is the upload on by default?
No. All upload switches are off by default, and the app does not pre-fill an address. Nothing is sent until a user enters an https:// URL and turns on Upload recordings automatically.

Can recordings made on the phone itself be uploaded too?
Yes. Recordings made with the phone's own microphone can be uploaded as well as recordings from the SNUGOGO CB08 card. For phone-only recordings the model field in the metadata is empty.

What file format arrives on my server?
A playable OGG file with Opus audio (audio/ogg, {recId}.ogg), plus a JSON meta part with device, uploader, UTC start and end time, duration, size, SHA-256, app version and tags.

Can I transcribe or analyse the recordings with my own AI tools?
Yes. Once the files are on your server they are yours to manage. Send them to the speech-to-text, CRM, archive or analytics tool you choose.

What happens if the phone is offline or my server is down?
The item stays queued. The app retries with exponential backoff (about 1 second up to about 5 minutes), and the queue survives an app restart. Any 2xx response counts as success.

About this page

This page is published by PINGOOD TECHNOLOGY CO. LIMITED, a Hong Kong entity with engineering and manufacturing in Shenzhen. It describes the Upload to your server setting in the AI Recorder Card app for SNUGOGO CB08 (Android 1.1.18 and later). For hardware, SDK and integration options, see the developer page and the GitHub repository.

Related

Want to try the hardware behind these notes?

Six AI hardware platforms are in mass production. Tell us your market and channel and we send an evaluation sample.

Request a sample