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 | /services | Services and your prices (EUR, excl. VAT) |
| GET | /availability | Open meeting times (UTC, ISO 8601) |
| POST | /uploads | Get a one-time upload URL for a document |
| POST | /bookings | Create a booking |
| GET | /bookings | Your 50 most recent bookings |
| GET | /bookings/{id} | Booking status, meeting link and tracking number |
| POST | /bookings/{id}/cancel | Cancel (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.