> ## Documentation Index
> Fetch the complete documentation index at: https://sudomock.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> The base URL is https://api.sudomock.com.
> Authenticate every request with the x-api-key header. Keys begin with sm_.
> A render returns the finished image at data.print_files[0].export_path. A request sent with is_async true returns a job_id to poll at GET /api/v1/jobs/{job_id}.
> Prefer the official SDKs over hand-written HTTP calls: npm install sudomock for Node, pip install sudomock for Python.

# Consume a Studio action

> Server-only exactly-once confirmation of a Studio action against its bound successful render.

<RequestExample>
  ```js Node.js theme={"theme":{"light":"github-light","dark":"vesper"}}
  const response = await fetch("https://api.sudomock.com/api/v1/studio/actions/consume", {
    method: "POST",
    headers: {
      "x-api-key": "sm_your_api_key",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
      "payload": {
        "mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
        "render_uuid": "223e4567-e89b-12d3-a456-426614174001"
      },
      "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
      "type": "studio.mockup-saved",
      "version": 1
    }),
  });

  const data = await response.json();
  console.log(data);
  ```

  ```php PHP theme={"theme":{"light":"github-light","dark":"vesper"}}
  <?php

  $payload = <<<'JSON'
  {
    "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
    "payload": {
      "mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
      "render_uuid": "223e4567-e89b-12d3-a456-426614174001"
    },
    "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
    "type": "studio.mockup-saved",
    "version": 1
  }
  JSON;

  $ch = curl_init("https://api.sudomock.com/api/v1/studio/actions/consume");
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "x-api-key: sm_your_api_key",
      "Content-Type: application/json",
  ]);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);

  $response = curl_exec($ch);
  curl_close($ch);

  echo $response;
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"vesper"}}
  import requests

  payload = {
      "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
      "payload": {
          "mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
          "render_uuid": "223e4567-e89b-12d3-a456-426614174001"
      },
      "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
      "type": "studio.mockup-saved",
      "version": 1
  }

  response = requests.post(
      "https://api.sudomock.com/api/v1/studio/actions/consume",
      headers={"x-api-key": "sm_your_api_key"},
      json=payload,
  )

  response.raise_for_status()
  print(response.json())
  ```

  ```ruby Ruby theme={"theme":{"light":"github-light","dark":"vesper"}}
  require "net/http"
  require "uri"

  uri = URI("https://api.sudomock.com/api/v1/studio/actions/consume")
  request = Net::HTTP::Post.new(uri)
  request["x-api-key"] = "sm_your_api_key"
  request["Content-Type"] = "application/json"

  request.body = <<~JSON
    {
      "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
      "payload": {
        "mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
        "render_uuid": "223e4567-e89b-12d3-a456-426614174001"
      },
      "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
      "type": "studio.mockup-saved",
      "version": 1
    }
  JSON

  response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    http.request(request)
  end

  puts response.body
  ```

  ```go Go theme={"theme":{"light":"github-light","dark":"vesper"}}
  package main

  import (
  	"bytes"
  	"fmt"
  	"io"
  	"net/http"
  )

  func main() {
  	payload := []byte(`{
    "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
    "payload": {
      "mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
      "render_uuid": "223e4567-e89b-12d3-a456-426614174001"
    },
    "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
    "type": "studio.mockup-saved",
    "version": 1
  }`)

  	req, err := http.NewRequest("POST", "https://api.sudomock.com/api/v1/studio/actions/consume", bytes.NewBuffer(payload))
  	if err != nil {
  		panic(err)
  	}
  	req.Header.Set("x-api-key", "sm_your_api_key")
  	req.Header.Set("Content-Type", "application/json")

  	res, err := http.DefaultClient.Do(req)
  	if err != nil {
  		panic(err)
  	}
  	defer res.Body.Close()

  	body, _ := io.ReadAll(res.Body)
  	fmt.Println(string(body))
  }
  ```

  ```java Java theme={"theme":{"light":"github-light","dark":"vesper"}}
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;

  String payload = """
  {
    "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
    "payload": {
      "mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
      "render_uuid": "223e4567-e89b-12d3-a456-426614174001"
    },
    "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
    "type": "studio.mockup-saved",
    "version": 1
  }
  """;

  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.sudomock.com/api/v1/studio/actions/consume"))
      .header("x-api-key", "sm_your_api_key")
      .header("Content-Type", "application/json")
      .POST(HttpRequest.BodyPublishers.ofString(payload))
      .build();

  HttpResponse<String> response = HttpClient.newHttpClient()
      .send(request, HttpResponse.BodyHandlers.ofString());

  System.out.println(response.body());
  ```

  ```csharp .NET theme={"theme":{"light":"github-light","dark":"vesper"}}
  using System.Net.Http;
  using System.Text;

  var payload = """
  {
    "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
    "payload": {
      "mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
      "render_uuid": "223e4567-e89b-12d3-a456-426614174001"
    },
    "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
    "type": "studio.mockup-saved",
    "version": 1
  }
  """;

  var request = new HttpRequestMessage(HttpMethod.Post, "https://api.sudomock.com/api/v1/studio/actions/consume");
  request.Headers.Add("x-api-key", "sm_your_api_key");
  request.Content = new StringContent(payload, Encoding.UTF8, "application/json");

  var client = new HttpClient();
  var response = await client.SendAsync(request);

  Console.WriteLine(await response.Content.ReadAsStringAsync());
  ```

  ```bash cURL theme={"theme":{"light":"github-light","dark":"vesper"}}
  curl -X POST "https://api.sudomock.com/api/v1/studio/actions/consume" \
    -H "x-api-key: sm_your_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
      "payload": {
        "mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
        "render_uuid": "223e4567-e89b-12d3-a456-426614174001"
      },
      "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
      "type": "studio.mockup-saved",
      "version": 1
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={"theme":{"light":"github-light","dark":"vesper"}}
  {
    "replayed": false,
    "receipt": {
      "version": 1,
      "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "message_session_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "type": "studio.mockup-saved",
      "mockup_type": "psd",
      "session_kind": "setup",
      "action_context": {},
      "mockup_uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "render_uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    }
  }
  ```
</ResponseExample>


## OpenAPI

````yaml openapi.json POST /api/v1/studio/actions/consume
openapi: 3.1.0
info:
  title: SudoMock API
  description: >-
    Product mockup API. Render PSD templates, turn product photos into reusable
    mockups, create still images and videos, personalize text with fonts, and
    manage asynchronous jobs and signed webhooks.


    Every endpoint answers failures with the same envelope, so the status codes,
    the error_code values and the retry rule are documented once at
    https://sudomock.com/docs/errors rather than repeated per operation.
  version: 1.0.0
servers:
  - url: https://api.sudomock.com
    description: Production
security: []
tags:
  - name: PSD mockups
    description: Turn a Photoshop file into a reusable mockup, then render it.
  - name: Photo mockups
    description: Turn a product photo into a reusable mockup, then render artwork onto it.
  - name: Video mockups
    description: Render a mockup as a short video.
  - name: Fonts
    description: Upload and manage the fonts available to text layers.
  - name: Background removal
    description: Isolate a subject from its background as a standalone step.
  - name: Studio
    description: Open an embedded editor session and read what the customer produced in it.
  - name: Webhook endpoints
    description: Register signed endpoints and manage their secrets.
  - name: Webhook deliveries
    description: Inspect, replay and retry what those endpoints received.
  - name: Jobs
    description: Poll queued renders and read their results.
  - name: Account
    description: Read the current account, its plan and its remaining credits.
paths:
  /api/v1/studio/actions/consume:
    post:
      tags:
        - Studio
      summary: Consume a Studio action
      description: >-
        Server-only exactly-once confirmation of a Studio action against its
        bound successful render.
      operationId: consume_action_api_v1_studio_actions_consume_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StudioActionRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StudioActionResponse'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: Node.js
          source: >-
            const response = await
            fetch("https://api.sudomock.com/api/v1/studio/actions/consume", {
              method: "POST",
              headers: {
                "x-api-key": "sm_your_api_key",
                "Content-Type": "application/json",
              },
              body: JSON.stringify({
                "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
                "payload": {
                  "mockup_uuid": "c315f78f-d2c7-4541-b240-a9372842de94",
                  "render_uuid": "9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354"
                },
                "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
                "type": "studio.mockup-saved",
                "version": 1
              }),
            });


            const data = await response.json();

            console.log(data);
        - lang: PHP
          source: >-
            <?php


            $payload = <<<'JSON'

            {
              "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
              "payload": {
                "mockup_uuid": "c315f78f-d2c7-4541-b240-a9372842de94",
                "render_uuid": "9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354"
              },
              "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
              "type": "studio.mockup-saved",
              "version": 1
            }

            JSON;


            $ch =
            curl_init("https://api.sudomock.com/api/v1/studio/actions/consume");

            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            curl_setopt($ch, CURLOPT_HTTPHEADER, [
                "x-api-key: sm_your_api_key",
                "Content-Type: application/json",
            ]);

            curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);


            $response = curl_exec($ch);

            curl_close($ch);


            echo $response;
        - lang: Python
          source: |-
            import requests

            payload = {
                "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
                "payload": {
                    "mockup_uuid": "c315f78f-d2c7-4541-b240-a9372842de94",
                    "render_uuid": "9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354"
                },
                "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
                "type": "studio.mockup-saved",
                "version": 1
            }

            response = requests.post(
                "https://api.sudomock.com/api/v1/studio/actions/consume",
                headers={"x-api-key": "sm_your_api_key"},
                json=payload,
            )

            response.raise_for_status()
            print(response.json())
        - lang: Ruby
          source: >-
            require "net/http"

            require "uri"


            uri = URI("https://api.sudomock.com/api/v1/studio/actions/consume")

            request = Net::HTTP::Post.new(uri)

            request["x-api-key"] = "sm_your_api_key"

            request["Content-Type"] = "application/json"


            request.body = <<~JSON
              {
                "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
                "payload": {
                  "mockup_uuid": "c315f78f-d2c7-4541-b240-a9372842de94",
                  "render_uuid": "9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354"
                },
                "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
                "type": "studio.mockup-saved",
                "version": 1
              }
            JSON


            response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do
            |http|
              http.request(request)
            end


            puts response.body
        - lang: Go
          source: "package main\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n)\n\nfunc main() {\n\tpayload := []byte(`{\n  \"message_session_id\": \"7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52\",\n  \"payload\": {\n    \"mockup_uuid\": \"c315f78f-d2c7-4541-b240-a9372842de94\",\n    \"render_uuid\": \"9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354\"\n  },\n  \"request_id\": \"0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33\",\n  \"type\": \"studio.mockup-saved\",\n  \"version\": 1\n}`)\n\n\treq, err := http.NewRequest(\"POST\", \"https://api.sudomock.com/api/v1/studio/actions/consume\", bytes.NewBuffer(payload))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treq.Header.Set(\"x-api-key\", \"sm_your_api_key\")\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer res.Body.Close()\n\n\tbody, _ := io.ReadAll(res.Body)\n\tfmt.Println(string(body))\n}"
        - lang: Java
          source: |-
            import java.net.URI;
            import java.net.http.HttpClient;
            import java.net.http.HttpRequest;
            import java.net.http.HttpResponse;

            String payload = """
            {
              "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
              "payload": {
                "mockup_uuid": "c315f78f-d2c7-4541-b240-a9372842de94",
                "render_uuid": "9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354"
              },
              "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
              "type": "studio.mockup-saved",
              "version": 1
            }
            """;

            HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.sudomock.com/api/v1/studio/actions/consume"))
                .header("x-api-key", "sm_your_api_key")
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(payload))
                .build();

            HttpResponse<String> response = HttpClient.newHttpClient()
                .send(request, HttpResponse.BodyHandlers.ofString());

            System.out.println(response.body());
        - lang: .NET
          source: >-
            using System.Net.Http;

            using System.Text;


            var payload = """

            {
              "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
              "payload": {
                "mockup_uuid": "c315f78f-d2c7-4541-b240-a9372842de94",
                "render_uuid": "9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354"
              },
              "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
              "type": "studio.mockup-saved",
              "version": 1
            }

            """;


            var request = new HttpRequestMessage(HttpMethod.Post,
            "https://api.sudomock.com/api/v1/studio/actions/consume");

            request.Headers.Add("x-api-key", "sm_your_api_key");

            request.Content = new StringContent(payload, Encoding.UTF8,
            "application/json");


            var client = new HttpClient();

            var response = await client.SendAsync(request);


            Console.WriteLine(await response.Content.ReadAsStringAsync());
        - lang: cURL
          source: >-
            curl -X POST
            "https://api.sudomock.com/api/v1/studio/actions/consume" \
              -H "x-api-key: sm_your_api_key" \
              -H "Content-Type: application/json" \
              -d '{
                "message_session_id": "7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52",
                "payload": {
                  "mockup_uuid": "c315f78f-d2c7-4541-b240-a9372842de94",
                  "render_uuid": "9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354"
                },
                "request_id": "0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33",
                "type": "studio.mockup-saved",
                "version": 1
              }'
components:
  schemas:
    StudioActionRequest:
      properties:
        version:
          type: integer
          const: 1
        request_id:
          type: string
          format: uuid
          examples:
            - 0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33
        message_session_id:
          type: string
          format: uuid
          examples:
            - 7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52
        type:
          type: string
          enum:
            - studio.mockup-saved
            - studio.design-submitted
        payload:
          $ref: '#/components/schemas/StudioActionPayload'
      additionalProperties: false
      type: object
      required:
        - version
        - request_id
        - message_session_id
        - type
        - payload
      title: StudioActionRequest
      example:
        message_session_id: 7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52
        payload:
          mockup_uuid: c315f78f-d2c7-4541-b240-a9372842de94
          render_uuid: 9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354
        request_id: 0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33
        type: studio.mockup-saved
        version: 1
    StudioActionResponse:
      properties:
        success:
          type: boolean
          const: true
          default: true
        replayed:
          type: boolean
          examples:
            - false
        receipt:
          $ref: '#/components/schemas/StudioActionReceipt'
      additionalProperties: false
      type: object
      required:
        - replayed
        - receipt
      title: StudioActionResponse
    StudioActionPayload:
      properties:
        mockup_uuid:
          type: string
          format: uuid
          examples:
            - c315f78f-d2c7-4541-b240-a9372842de94
        render_uuid:
          type: string
          format: uuid
          examples:
            - 9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354
        action_id:
          anyOf:
            - type: string
              maxLength: 64
              minLength: 1
              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$
            - type: 'null'
          examples:
            - add-to-cart
        action_context:
          $ref: '#/components/schemas/StudioActionContext'
        render_parameters:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          description: >-
            Source-safe PSD or 2D render parameters emitted by the completed
            customize action.
        artwork_sources:
          anyOf:
            - items:
                $ref: '#/components/schemas/StudioArtworkSource'
              type: array
              maxItems: 8
            - type: 'null'
          description: >-
            Public artwork URLs per target, as emitted by Studio. Forwarded
            unchanged from the editor message; echoed back on the receipt.
      additionalProperties: false
      type: object
      required:
        - mockup_uuid
        - render_uuid
      title: StudioActionPayload
    StudioActionReceipt:
      properties:
        version:
          type: integer
          const: 1
        request_id:
          type: string
          format: uuid
          examples:
            - 0f9c2d1e-7b44-4a2f-9a0d-6c1f2b8e5d33
        message_session_id:
          type: string
          format: uuid
          examples:
            - 7d1b4a90-2e63-4f18-bb27-1c9a0e4d7f52
        type:
          type: string
          enum:
            - studio.mockup-saved
            - studio.design-submitted
        mockup_type:
          type: string
          enum:
            - psd
            - 2d
        session_kind:
          type: string
          enum:
            - setup
            - customize
        action_id:
          anyOf:
            - type: string
            - type: 'null'
          examples:
            - add-to-cart
        action_context:
          $ref: '#/components/schemas/StudioActionContext'
        mockup_uuid:
          type: string
          format: uuid
          examples:
            - c315f78f-d2c7-4541-b240-a9372842de94
        render_uuid:
          type: string
          format: uuid
          examples:
            - 9b2e5f31-4c8d-4a76-8f0b-2d7e6c1a9354
        render_parameters:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          description: >-
            Server-confirmed, source-safe PSD or 2D parameters bound to the
            successful render.
        artwork_sources:
          anyOf:
            - items:
                $ref: '#/components/schemas/StudioArtworkSource'
              type: array
            - type: 'null'
          description: >-
            The artwork URLs supplied with this action, returned unchanged. Not
            stored and not server-confirmed: on a replayed action this echoes
            what the replay attempt sent, and a differing value does not make
            the action conflict.
      additionalProperties: false
      type: object
      required:
        - version
        - request_id
        - message_session_id
        - type
        - mockup_type
        - session_kind
        - action_context
        - mockup_uuid
        - render_uuid
      title: StudioActionReceipt
    StudioActionContext:
      properties:
        shop:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          examples:
            - your-store.myshopify.com
        product_id:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          examples:
            - '8342019283'
        variant_id:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          examples:
            - '44912837465'
      additionalProperties: false
      type: object
      title: StudioActionContext
    StudioArtworkSource:
      properties:
        uuid:
          anyOf:
            - type: string
              pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
            - type: 'null'
          examples:
            - 6f1c8d42-0b57-4e39-a6d8-3c95b1e740af
        surface_uuid:
          anyOf:
            - type: string
              pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
            - type: 'null'
        smart_object_uuid:
          anyOf:
            - type: string
              pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
            - type: 'null'
        url:
          type: string
          maxLength: 2048
          examples:
            - https://cdn.example.com/design-cutout.png
      additionalProperties: false
      type: object
      required:
        - url
      title: StudioArtworkSource
      description: >-
        Public URL of the artwork a shopper ended up with, per target.


        Studio emits this alongside render_parameters so the host page can keep
        the

        image the shopper paid for -- background-removal cutouts in particular,
        which

        the render request itself carries as inline data and therefore cannot
        name.


        It is caller-supplied and echoed back verbatim, exactly like
        action_context:

        the server does not attest that these URLs belong to this render, and
        does

        not store them on the receipt. Never put a URL from here into

        render_parameters -- those are hash-bound to the render and any edit
        there

        makes the cart call fail.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API key with sm_ prefix. Get your key at
        https://sudomock.com/dashboard/api-keys

````