Receive your apostille the same day or get your money back.
    Book now

    Notary & apostille API and booking widget

    Let your clients book online notary meetings from your own website or platform. Bookings are invoiced to you as a partner.

    1. Booking widget (no developer needed)

    Paste one line where you want a "Book a notary meeting" button. Clients book a time, choose services and upload documents. Bookings are linked to your partner account.

    <script src="https://notarydirect.se/widget.js" data-partner="YOUR-SLUG" async></script>

    Options: data-mode="inline" to show the form directly on the page, data-label, data-color, data-lang="ua". The widget must be switched on for your account.

    2. REST API

    Base URL: https://fvrslnsccaefjsakyqdg.supabase.co/functions/v1/partner-api/v1. Authenticate with your secret key, which you get from NotaryDirect. Never put it in browser code.

    Authorization: Bearer nd_live_...
    GET/servicesServices and your prices (EUR, excl. VAT)
    GET/availabilityOpen meeting times (UTC, ISO 8601)
    POST/uploadsGet a one-time upload URL for a document
    POST/bookingsCreate a booking
    GET/bookingsYour 50 most recent bookings
    GET/bookings/{id}Booking status, meeting link and tracking number
    POST/bookings/{id}/cancelCancel (until 24 hours before the meeting)

    Create a booking

    # 1. (optional) upload a document
    curl -X POST https://fvrslnsccaefjsakyqdg.supabase.co/functions/v1/partner-api/v1/uploads -H "Authorization: Bearer $KEY" \
      -H "Content-Type: application/json" -d '{"file_name":"passport.pdf"}'
    # -> { "file_path": "...", "upload_url": "...", "method": "PUT" }
    curl -X PUT "$UPLOAD_URL" -H "Content-Type: application/pdf" --data-binary @passport.pdf
    
    # 2. book
    curl -X POST https://fvrslnsccaefjsakyqdg.supabase.co/functions/v1/partner-api/v1/bookings -H "Authorization: Bearer $KEY" \
      -H "Content-Type: application/json" -d '{
      "meeting_datetime": "2026-11-03T09:30:00Z",
      "timezone": "Europe/London",
      "client": { "name": "Jane Doe", "email": "jane@example.com", "phone": "+447700900123" },
      "documents": [
        { "service": "certified_copy", "apostille": true, "file_path": "api/.../passport.pdf" }
      ],
      "destination_country": "Spain",
      "shipping": { "ship_to_partner": false },
      "external_reference": "your-order-123"
    }'

    Services: certified_copy, certified_signature, certification_of_facts, not_sure. For a hard copy, add shipping.address or set ship_to_partner: true (if enabled for you). Meetings are online video meetings only.

    Response

    {
      "id": "6f1c...", "booking_number": "ND-2026-0231",
      "status": "booked", "meeting_datetime": "2026-11-03T09:30:00Z",
      "meeting_url": "https://...whereby.com/...",
      "price_eur_excl_vat": 150, "billing": "invoiced_to_partner",
      "tracking_number": null, "external_reference": "your-order-123"
    }

    Statuses: booked, assigned, in_progress, completed, shipped, delivered, cancelled.

    3. Status updates (webhooks)

    Give us an HTTPS URL and we send a POST when a booking changes status. Verify that each update came from us using your signing secret:

    X-NotaryDirect-Timestamp: 1767225600
    X-NotaryDirect-Signature: sha256=HMAC_SHA256(secret, timestamp + "." + raw_body)
    
    { "event": "booking.completed", "data": { "id": "...", "booking_number": "ND-2026-0231",
      "status": "completed", "tracking_number": null, "external_reference": "your-order-123" } }

    Errors and limits

    Errors return JSON {"error": ...} with status 400 (invalid input), 401 (bad key), 404, 409 (time no longer available). Limit: 600 requests per hour.

    NotaryDirect coordinates bookings. The notarial act itself is performed by an independent licensed Notary Public.

    Want a key? Book an intro call or email info@notarydirect.se.