Create your first product draft
Create a complete physical-product draft through the currently supported Developer API. Use your own server and the API base URL for your enabled environment.
1. Create a write-enabled key
In Dashboard → Settings → Developer API, create a seller-owned key with both offers:read and offers:write. Store it securely. Do not share it or put it in frontend code.
2. Obtain valid category information
Call GET https://api.amajova.com/developer/v1/catalogue with your server-side read-scoped key. Choose an active product category and subcategory, then use their mapped attribute definitions, allowed options and compliance requirements. Product attributes and compliance requirements vary by category.
3. Upload a product image
curl -X POST "https://api.amajova.com/developer/v1/media" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@product.jpg"Copy the media_upload_id from the response. For multiple images, upload each one separately.
4. Create the draft
First fetch the Live category, subcategory, attribute options and compliance requirements with GET https://api.amajova.com/developer/v1/catalogue using your read-scoped API key. Do not copy example category UUIDs from another environment.
Send JSON with template_key, offer, and ordered media_upload_ids, along with a unique Idempotency-Key. A complete tested physical-product example is in the API reference.
curl -X POST "https://api.amajova.com/developer/v1/offers" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: YOUR_UNIQUE_OPERATION_ID" \
-H "Content-Type: application/json" \
--data-binary @offer.jsonSave the example JSON from the API reference as offer.json, replacing the image UUID placeholder with a real uploaded ID or using []. On Windows PowerShell, use Invoke-RestMethod with UTF-8 bytes if your shell alters JSON quoting.
5. Confirm the response
{"offer_id":"...","status":"draft","replayed":false}Review the draft in the seller dashboard. The API creates drafts only; the existing seller publishing workflow enforces compliance and other readiness checks. Do not mistake a successful draft response for a published offer.
For response codes, limitations, shipping and returns structures, see the full API reference.
Connect and test a fulfillment website
Use the API origin and credentials configured for your seller account. Test the integration with a controlled order before enabling it for customers; never mix credentials from different environments.
- Prepare your server: expose a dedicated HTTPS webhook endpoint and keep the signing secret and Developer API keys on your server only.
- Add a website: open Dashboard → Settings → Developer API → Webhooks → Add a website. Enter the HTTPS endpoint and subscribe to
order.fulfilment_eligible. New connections start paused; store the one-time signing secret before enabling. - Enable and select: validate the receiver, enable the connection, and in Offer Builder Step 7 select Automatic Website Fulfilment and the enabled destination. A disabled destination should not be offered for new selections.
- Verify notifications: authenticate each webhook using the documented signature contract, reject invalid or stale messages, and deduplicate event IDs. Do not treat the webhook alone as proof that an entitlement may be granted.
- Confirm the order: use a server-only
orders:readkey withGET /developer/v1/orders/{order_uuid}and verify the seller, purchase, current eligibility and your own trusted account-to-product mapping. - Fulfill and report: grant access exactly once, then send versioned JSON to
POST /developer/v1/orders/{order_uuid}/fulfillmentwith a server-onlyfulfillment:writekey. Usebuyer_action_required,processingorfailedwhile delivery remains pending; reportdeliveredonly with explicit confirmation and at least one permitted item. - Inspect and retry: check webhook delivery history, retry transient failures idempotently and test invalid signatures, duplicates and non-eligible orders before using real purchases.
Disabling is not deleting: the connection and history remain. Disabling can stop queued webhook attempts for existing orders, so do not disable a connection while paid orders still depend on it. Re-enable only after checking the receiver and pending work.
See the webhook and signature reference and versioned fulfillment JSON contract for the required request format, security checks and retry semantics.
Digital-product quickstart
To create a digital-product draft, send POST /developer/v1/offers with template_key: "create_and_deliver" and the same Bearer key and idempotency header. Use a valid Printables category and Planners & Organisers subcategory for a digital planner. Supply title, short description, outcome, price, currency, digital-product type, access instructions and licence information. The API reference contains a complete tested JSON example.
The API accepts an unpublished digital draft without an access URL. In the seller dashboard, an external-link digital offer currently requires a real HTTPS link before the editor can save it. Digital files are uploaded through the supported seller workflow, not the Developer API image endpoint. Do not use fake URLs or publish incomplete offers.
Editor compatibility: Keep the offer title to 51 characters or fewer and the short description to 80 characters or fewer. The API may accept longer draft text, but the seller editor enforces these limits.
Read recent orders (Orders API)
In Dashboard → Settings → Developer API, create a seller-owned key with orders:read. The settings interface may also require offers:read. Keep the key on your server and use the API base URL for your enabled environment.
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.amajova.com/developer/v1/orders"The HTTP 200 response contains an orders array with up to 50 recent seller-owned orders. Take an order id from the response and retrieve its details:
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.amajova.com/developer/v1/orders/ORDER_UUID"Replace ORDER_UUID with an ID from your own listing. Requests for another seller's order return HTTP 404. Query parameters, including ?limit=1, are unsupported; there is no pagination in this release. See the Orders API reference for errors and limitations. These endpoints cannot change orders or process refunds.
Structured website fulfillment
Report buyer actions, processing, failure or confirmed delivery using versioned JSON. Confirmed content can include website access, downloads, activation codes and instructions. Universal JSON contract, states and retry rules. A received JSON message or action button alone never marks an order delivered.