Skip to content

Quickstart

From no account to a rendered video in about five minutes, with a free test key that never spends credits.

You will create a project, put a title on its timeline and render it. With a test key the render comes back at once as a sample file and nothing is charged, so you can wire up the whole integration before anything costs money.

  1. Create an app and a test key

    Sign in at developer.vidmoat.com, register an app, and create a test key. Pick the Build & render preset: it carries projects.write, media.write and render.write on top of the read scopes.

    The key is shown once. Copy it and keep it on your server, never in browser code.

  2. Export the key

    Shell
    export VIDMOAT_KEY="vmk_test_your_key_here"

    Check it works and see what it can do:

    Shell
    curl https://api.vidmoat.com/v1/me \
      -H "Authorization: Bearer $VIDMOAT_KEY"

    credential.environment should say test, and credential.scopes lists what the key carries.

  3. Run the quickstart

    Each version creates a project, adds a three-second title, queues a render and polls it until it finishes. They stop on the first HTTP error and never queue the render twice.

    quickstart.sh
    # Requires Bash, curl and jq. Keep the key on your server.
    set -euo pipefail
    export VIDMOAT_KEY="YOUR_TEST_OR_LIVE_KEY"
    BASE="https://api.vidmoat.com/v1"
    
    # Test keys still create and edit real projects. Renders are sample fixtures.
    ID=$(curl --fail-with-body -sS -X POST "$BASE/projects" \
      -H "Authorization: Bearer $VIDMOAT_KEY" \
      -H "Content-Type: application/json" \
      -d '{"name":"Hello, Vidmoat API"}' | jq -er '.project.id')
    
    curl --fail-with-body -sS -X POST "$BASE/projects/$ID/commands" \
      -H "Authorization: Bearer $VIDMOAT_KEY" \
      -H "Content-Type: application/json" \
      -d '{"commands":[{"op":"addTextClip","text":"Hello","start":0,"duration":3}]}'
    
    JOB=$(curl --fail-with-body -sS -X POST "$BASE/renders" \
      -H "Authorization: Bearer $VIDMOAT_KEY" \
      -H "Content-Type: application/json" \
      -d "{\"projectId\":\"$ID\"}" | jq -er '.render.id')
    
    # Stop on errors; do not retry a render POST after an uncertain timeout.
    for i in $(seq 1 120); do
      RESULT=$(curl --fail-with-body -sS "$BASE/renders/$JOB" \
        -H "Authorization: Bearer $VIDMOAT_KEY")
      STATUS=$(printf '%s' "$RESULT" | jq -er '.render.status')
      case "$STATUS" in
        COMPLETED) printf '%s' "$RESULT" | jq -er '.render.url'; exit 0 ;;
        FAILED|CANCELLED) printf '%s\n' "$RESULT" >&2; exit 1 ;;
      esac
      sleep 5
    done
    echo "Still processing after 10 minutes. Resume polling $JOB; do not queue it again." >&2
    exit 1
  4. Read the result

    With a test key the render is COMPLETED immediately, with test: true and a sample video url. The project and its title are real: open the project in the Vidmoat editor to see them.

  5. Go live

    When the plumbing is right, create a live key (it needs a plan with live API access and an app approved in review) and swap it in. The same code now queues a real render against your export allowance. Before you ship, add a webhook for render.completed instead of polling, and read errors and retries.