Skip to content
Connect an agent

Plotwork

Import a Plotwork diagram

Has Plotwork paint the diagram as a PNG, keeps it as a media file with alt text, and answers the file, ready: put its id in a post's mediaIds.

POST/v1/plotwork/diagrams/{id}/import

TL;DR

QuestionAnswer
What does it do?Import a Plotwork diagram.
What does it need?An API key or an OAuth access token.
What does it take?A JSON body with the fields below, and id in the path, and idempotency-key in a header.
What does it return?Status 201 with a body of type Media.
In the SDK?flung.plotwork.importDiagram()
As an MCP tool?attach_plotwork_diagram
What can go wrong?401 Missing, unknown, revoked or expired API key; 404 No such diagram in the connected account; 409 Plotwork is not connected (plotwork_not_connected), or must be connected again (plotwork_reconnect), in the portal; 422 The request failed validation; 429 Too many requests for this credential; wait for retry-after seconds; 502 Plotwork could not be reached or refused for a moment (plotwork_unavailable); 503 Plotwork is not set up on this server (not_configured). Every failure has the same error shape.

Example

curl
curl -X POST 'https://api.flung.dev/v1/plotwork/diagrams/0b7e3c1a-5d2f-4c88-9a41-6f0e2d9b7c35/import' \  --header "Authorization: Bearer $FLUNG_API_KEY" \  --header 'Content-Type: application/json' \  --header "Idempotency-Key: $(uuidgen)" \  --data '{}'

A successful answer looks like this:

json
{  "id": "med_aaaaaaaaaaaaaaaaaaaaaaaa",  "contentType": "image/jpeg",  "filename": "string",  "altText": "string",  "bytes": 1,  "status": "pending",  "preview": {    "status": "processing",    "thumbnailUrl": "string",    "hlsUrl": "string",    "dashUrl": "string",    "durationSeconds": 1  },  "createdAt": "2026-11-01T09:00:00.000Z"}

Path parameters

FieldTypeRequiredDescription
idstringyesA diagram id from the list.

Header parameters

FieldTypeRequiredDescription
idempotency-keystringnoAny unique string, such as a UUID. A retry with the same key and body within 24 hours gets the first answer instead of running again.

Request body

The body has the type an object, with the fields below.

FieldTypeRequiredDescription
scheme"light" | "dark"noPainted light or dark. A picture drawn for one scheme keeps it. default "light".
widthintegernoThe width in pixels; 1600 suits every network. minimum 800; maximum 2400; default 1600.
altTextstringnoDefaults to the diagram's name. at least 1 character; at most 1000 characters.

Responses

StatusMeaningBody
201The media file, ready.Media
401Missing, unknown, revoked or expired API key.Error
404No such diagram in the connected account.Error
409Plotwork is not connected (plotwork_not_connected), or must be connected again (plotwork_reconnect), in the portal.Error
422The request failed validation.Error
429Too many requests for this credential; wait for retry-after seconds.Error
502Plotwork could not be reached or refused for a moment (plotwork_unavailable).Error
503Plotwork is not set up on this server (not_configured).Error

Response body

A 201 answer has the type Media.

FieldTypeRequiredDescription
idstringyes
contentTypeMediaTypeyesWhat the file really is, read from its first bytes once uploaded.
filenamestring | nullyes
altTextstring | nullyesThe alt text the file was imported with, such as a Plotwork diagram's name. Null for an upload.
bytesinteger | nullyes
status"pending" | "processing" | "ready" | "failed"yespending until its bytes arrive; ready once a post can use it.
previewobject | nullyesVideos only, where previews are set up: a thumbnail. Read the file again while processing.
preview.status"processing" | "ready" | "failed" | "skipped"yesskipped when the video is over 100 MB or this month's thumbnail allowance is used up. Posts never wait for a preview; they use the file as uploaded.
preview.thumbnailUrlstring | nullyesA JPEG frame one second in, 640 pixels wide, at an address that does not expire.
preview.hlsUrlstring | nullyesAlways null for now: streaming versions are not made.
preview.dashUrlstring | nullyesAlways null for now.
preview.durationSecondsnumber | nullyesAlways null for now.
createdAtstringyes

See also

DocWhy
API referenceEvery endpoint
SchemasEvery request and response type
ErrorsEvery error code and what to do about it
attach_plotwork_diagramThe same operation as an MCP tool