Create a key
Select only the abilities your service needs and store the secret in a server-side secret manager.
A practical REST API for private image digitising and real machine-file conversion. This page is the complete quickstart, endpoint reference and error guide.
Base URL
Auth
Bearer key
Rate
60/min
Jobs
Async
Keys are scoped, expire, can be revoked immediately, and are shown only once. Keep them on your server—never ship one in browser or mobile client code.
Select only the abilities your service needs and store the secret in a server-side secret manager.
POST multipart form data with the workflow, output format and one private source file.
Use the returned workflow and job ID until status is completed or failed.
curl -X POST https://embroideryfileconverter.com/api/developer/v1/jobs \
-H "Authorization: Bearer $EFC_API_KEY" \
-H "Accept: application/json" \
-F "workflow=conversion" \
-F "format=dst" \
-F "[email protected]"Authentication
Send the key in the Authorization header on every request. A key can access only its owner’s jobs and only the abilities selected when it was created.
formats:readusage:readjobs:readjobs:writeAuthorization: Bearer efc_live_...
Accept: application/jsonServer-side only
Need delegated user access?
POST /jobs
Upload PES, DST, JEF or another readable embroidery format and choose a different writable output.
Generate a stitch preview from artwork. Finished width and maximum thread colour count are required.
Single files and batches
file for one source or files[] for up to 10 sources. Limited free processing may accept one file per request. Every batch uses one shared workflow and output format.{
"message": "Processing started.",
"job": {
"id": "01JEXAMPLEJOBID000000000",
"status": "queued",
"workflow": "conversion"
},
"jobs": [
{
"id": "01JEXAMPLEJOBID000000000",
"status": "queued",
"workflow": "conversion"
}
],
"freeUsage": {
"previewRemaining": 2,
"creditBalance": 0
}
}HTTP 202 means the private job was accepted, not that the machine file is ready. Persist both job.id and job.workflow; the workflow selects the status route.
queuedWaiting for a workerprocessingEngine is runningcompletedInspect outputs and warningsfailedRead failureCode and failureReasonPolling and files
A completed response includes parsed metrics, warnings, events, preview artifacts and output files. Signed URLs are short-lived; request the job again when a URL expires.
curl https://embroideryfileconverter.com/api/developer/v1/jobs/conversion/01JEXAMPLEJOBID000000000 \
-H "Authorization: Bearer $EFC_API_KEY" \
-H "Accept: application/json"Stitch count, dimensions and engine-specific measurements.
Compatibility or production notes that your UI should show.
Signed URLs last 10 minutes and still enforce ownership and unlock state.
Unlock can consume an entitlement
job.unlock or GET /usage. Calling the unlock endpoint may consume a subscription allowance or existing processing credits. Internal accounts may unlock without charge. It does not open a checkout or purchase credits.Endpoint reference
/formatsReadable sources, writable outputs and compatibility warnings.
formats:read/usagePreview allowance, credits, workflow costs and reset dates.
usage:read/jobsThe account’s 50 most recent private processing jobs.
jobs:read/jobsCreate a conversion or image-digitising preview job.
jobs:write/jobs/conversion/{id}Inspect one owned conversion job and its outputs.
jobs:read/jobs/digitising/{id}Inspect one owned digitising job and its outputs.
jobs:read/jobs/{workflow}/{id}/retryRequeue a failed job while its private source still exists.
jobs:write/jobs/{workflow}/{id}/unlockUnlock a completed job using allowance or existing credits.
jobs:writeGET /formats returns data[] and artworkInputs[]. GET /jobs returns data[] plus freeUsage and is capped at the 50 most recent jobs.
Retry accepts only a failed job whose source has not expired. A successful retry returns HTTP 202 with the job reset to queued.
Errors and rate limits
401Missing, invalid, expired or revoked key
403Missing ability or resource belongs to another user
404Job or private file was not found
409Job state does not permit this action
410Source upload has expired
422Invalid fields, file, format or insufficient quota
429Rate limit exceeded
{
"message": "The format field is invalid.",
"errors": {
"format": [
"Choose an output format different from every detected source format."
]
}
}60 requests per minute
Handle HTTP 429
Retry-After and use exponential backoff with jitter. Do not continuously poll completed or failed jobs.Building for an AI agent?
The agent guide includes connection setup, discovery URLs, OAuth PKCE, every tool schema and copy-ready JSON-RPC examples.