Emarati CorpusBY XPIN
THE CORPUS HANDBOOK

A good place to start.

Everything you need to contribute clean audio pairs, follow your uploads, and review the collection with confidence.

Welcome to the workspace.

Emarati Corpus brings original recordings and their transcripts into a shared, private collection. The default languages are Emarati and English.

  1. Ask your superadmin to create an account using your exact @xpin.ae work email and assign your language collections.
  2. Open Sign in and enter the temporary credentials shared privately with you.
  3. Set a personal password of at least 12 characters. This is required before entering the workspace.
  4. Open Upload audio to contribute, or Corpus library if you have review access.
Accounts are provisioned by your team. Public self-registration, automatic email invitations, and self-service password reset are not enabled. Your superadmin can issue a new temporary password.

Your first contribution.

  1. Choose Upload audio and select an assigned language.
  2. Add an optional batch name that helps your team recognize the recording session.
  3. Select or drag in your WAV/TXT pairs, ZIP archives, or a combination.
  4. Click Upload contribution. Keep the tab open until the transfer to the server finishes.
  5. Follow the batch in My uploads or Upload history. Once received, server-side validation and storage continue even if you leave the page.

A successful batch is marked Complete. Its recordings then appear in the admin library, and its audio hours and storage volume are added to the dashboard. A client can see their own receipts and totals.

session-01/
  001.wav
  001.txt
  002.wav
  002.txt

Two files. One recording.

Every WAV needs a TXT with the same filename stem in the same relative folder. For example, 001.wav pairs with 001.txt. An unpaired item rejects the entire batch before storage begins.

RuleAccepted input
AudioUncompressed PCM or IEEE float WAV, 8–192 kHz, 1–8 channels
TranscriptNonempty UTF-8 TXT, with an optional BOM
Bulk archiveZIP with paired files; relative subfolders are preserved
Batch sizeUp to 1,000 pairs and 1 GiB uploaded
Expanded sizeUp to 2 GiB after ZIP expansion
Individual files256 MiB per WAV; 1 MiB per TXT
Combined transcriptsUp to 32 MiB per batch
Duplicate names, invalid or truncated audio, binary text, nested or password-protected archives, unsafe paths, and ZIP links are rejected. Case is ignored when pairing filenames. Two folders can each contain 001.wav, provided each has its own matching TXT.

Original audio is not transcoded. Original text and audio stay preserved after upload; no role can edit or delete them through this portal.

The right access for each role.

RoleWhat you can doScope
SuperadminUpload, review, export manifests, manage accounts and languages, inspect audit historyAll collections
AdminView contribution hours and volume; play audio, read text, approve or flag pairs; export manifestsAssigned languages
ClientBulk upload; see your own receipts and totals; retry failed transfersUpload to assigned languages; receipts for your own batches

Superadmins manage language access in People & access. Changing access or deactivating an account ends its existing sessions. An inactive account's contribution history is preserved.

Listen, read, and verify.

  1. Open Corpus library. Filter by language, review status, filename, or contributor.
  2. Choose Review on a recording. Play its audio alongside the original transcript.
  3. Choose Approve pair when the audio and transcript match.
  4. Choose Needs attention for a mismatch or other issue. Add a note explaining what needs checking.
  5. Use Reset review to return a pair to pending. Every review change is recorded in the audit trail.

Export manifest downloads a CSV of the recordings you can access, including measured durations, review states, and storage references. It does not download the audio files themselves.

When something needs attention.

My batch says “Rejected”.

Read the error in your upload receipt. Common causes are a missing TXT partner, duplicate names, an invalid WAV, or a non-UTF-8 transcript. Correct the complete selection and submit a new batch. A validation-rejected batch has not been added to the corpus.

My batch says “Transfer failed”.

Open the receipt and choose Retry. The system uses the retained input files and recognizes objects already stored. It will not replace existing content. Check Service status if the failure persists.

The upload was interrupted.

If the browser lost its connection before receipt, retry the same selection in the same tab; its request identity prevents duplicate completed batches. If the receipt says staging was incomplete, submit the files as a new batch. After staging finishes, server-side work can resume following a service restart.

I cannot see a language or another person's uploads.

Clients only see their own receipts. Admins only see assigned languages. Ask your superadmin to check your role and language assignments in People & access, then sign in again if access was changed.

I forgot my password or cannot sign in.

Use your provisioned @xpin.ae email. Ask your superadmin to reset the account password if needed. After too many failed attempts, wait 15 minutes before trying again. Newly issued temporary passwords must be changed at sign-in.

The queue is full or there is not enough staging space.

Wait for an active batch to finish if the queue is busy. If staging space is unavailable, contact the workspace administrator. Original inputs and rejected submissions are retained; storage capacity may need to be expanded.

API reference.

The browser uses the same role-protected API. Authenticated writes require the current session cookie and the X-CSRF-Token returned by GET /api/me. Uploads also require a unique Idempotency-Key header of 16–100 letters, digits, hyphens, or underscores.

EndpointPurpose
POST /api/auth/loginSign in with JSON email and password
GET /api/meCurrent user, scopes, CSRF token, upload limits
GET /api/languagesYour active language collections
POST /api/uploadsMultipart fields: language, optional label, repeated files
GET /api/uploadsRole-scoped batch receipts; page parameter
GET /api/clipsAdmin library; language, status, search, page filters
GET /api/clips/{id}/audioScoped audio stream with byte-range support
POST /api/clips/{id}/reviewJSON status and note; admin review permission required
GET /api/public/statusPublic, cached service connectivity report

Never share session cookies, CSRF tokens, or account passwords. Storage credentials stay on the server.