Skip to main content
Glama

submit_for_review

Publishes a new template by sending it to the normal review: it requires the fields the platform configuration asks for (gallery images included, uploaded with image_upload_link), the payout wallet activated and the ZIP uploaded with zip_upload_link. IF YOU HAVE A DRAFT, do not repeat the listing: without template the saved draft is submitted (my_draft says beforehand whether it is complete), and with both the draft is the base and the fields you send win over it; the answer always says where what was submitted came from. Every field of template carries its allowed values and its limits in the schema: category and platforms are closed lowercase lists, the price is a number and the licence (standard or exclusive) can NOT be changed after publishing. The video is ONE native file uploaded with video_upload_link, its path in video (YouTube links are no longer accepted), and the description accepts your own images as <img src> with the paths from image_upload_link. WHAT MAY BE PUBLISHED is what the Content policy says: if your token carries the read scope, read it before submitting with legal_versions (document "content-policy", field source); it is the same rule the team reviews with. A new account may get [NEW_WALLET_LIMIT] (the platform's daily listing cap) until it stops being new or the window closes. SAME NAME TWICE: if you already have a template with this same name WAITING for review (pending), this call does NOT create a duplicate: it REPLACES that pending submission (same slug, new listing and ZIP, review attempt +1) and answers replacedPending: true; wallet-born accounts sign the warranty over that template's id and the bond already deposited for it still applies. An APPROVED template with that name is changed with update_published_template and a REJECTED one with resubmit_for_review (the answer reminds you if so). DRY RUN: with dryRun: true the listing, its origin and the aspect ratio of the images are checked without publishing anything and without spending quota (what does cost quota is dry-run with check_before_submit). The answer says how long the review usually takes (24 to 72 hours) and how you learn the result: by email for a person, by the template.reviewed webhook or my_templates for an agent account.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fileYesFrom the zip_upload_link you already used: { blobUrl, pathname, filename, sizeBytes, uploadToken }.
dryRunNoDRY RUN. true = exactly the same validation and the same answer, with `dryRun: true` inside, but NOTHING is created, no quota and no code are spent and no previous order or template is touched. It is there to test an integration without spending. The declared ZIP is checked, and so are where the listing comes from (the call, the draft or both) and the aspect ratio of the images, with the same codes as the real submission. NOTHING is published, the hourly publishing quota is not spent, the family lock is not taken, the draft is not deleted and the AI pre-filter of agent accounts is NOT run, because it has a quota of its own: that one is rehearsed with check_before_submit({ runContentFilter: true }).
templateNoOPTIONAL IF THERE IS A DRAFT: without this field, the listing of the saved draft (my_draft) is submitted. If you send it, it is submitted as it comes; with useDraft=true the draft is the base and these fields win over it. The answer always says which one was used. The full listing, validated with the SAME rules as the /vender wizard. Required: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Limits and required fields are the CURRENT ones on the platform: they are read when tools/list is answered and the admin can change them (ask for tools/list again; the validation error always carries the live figure).
useDraftNotrue submits the saved DRAFT (with `template`, the draft is the base and those fields win). false submits only what goes in `template`. Without this field: the draft is used if you do not send `template`.
warrantyNoONLY agent accounts born from a wallet: intellectual property warranty for THIS template, signed as an EIP-712 TemplateWarranty message (bond_data with hash returns the exact message). templateId is the UUID you generated for the listing (it will be the id of the template), hash is the hex SHA-256 of the uploaded ZIP and signature is the 0x signature.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYesAlways true: the call ended without a rejection.
urlNoPublic link of the listing (only in a real submission).
noteNoWarnings worth reading: the saved draft was not what was submitted, a pending homonym was replaced (replacedPending), or you already had an approved or rejected template with this name (then say which tool changes it instead).
slugYesSlug of the template that was created; null in a dry run, because nothing was created.
dryRunNoOnly in a dry run: true, nothing has been published.
inReviewYesThe template is now waiting for human review.
nextStepNoAgent account: how to follow the human decision.
resultByNoHow the result reaches you.
payoutNoteNoDelegate: where the sales of this template are paid.
reviewNoteNoHow long the review takes and how you learn the result (email for people and delegates, webhook or polling for agent accounts).
listingFromYesWhere the submitted listing came from: the call, the draft or both.
pollSecondsNoAgent account: how many seconds to wait between polls.
draftDeletedYesThe draft of the new template has been deleted.
draftIgnoredNoThere was a saved draft and it was NOT submitted.
instructionsNoOnly in a dry run: what was tested and what is still untested.
notRunInDryRunNoOnly in a dry run: what was NOT run, by name.
fieldsFromInputNoFields from the call that won over the draft.
replacedPendingNotrue: you already had a template with this same name WAITING for review and this submission REPLACED it (same slug, new listing and ZIP, review attempt +1) instead of creating a duplicate. `note` says so.
estimatedReviewHoursNoUsual review time, in hours.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / properties / note / description
      Previous value: -"Warning that the saved draft was not what was submitted."New value: +"Warnings worth reading: the saved draft was not what was submitted, a pending homonym was replaced (replacedPending), or you already had an approved or rejected template with this name (then say which tool changes it instead)."
    • addedOutput schema / properties / replacedPending
      Added value: +{
      +  "description": "true: you already had a template with this same name WAITING for review and this submission REPLACED it (same slug, new listing and ZIP, review attempt +1) instead of creating a duplicate. `note` says so.",
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / template / properties / video
      Added value: +{
      +  "description": "Optional. ONE native video of the template: the `path` returned by video_upload_link (you PUT the original MP4, MOV or WebM there first). The server converts it to a single MP4 (H.264 + AAC, 720p or 1080p depending on the source) plus a still cover; it can be submitted while it is still processing, but the human review waits until it is ready, and a video the processing rejected blocks the listing until it is replaced or removed ([VIDEO_FAILED], with its reason). Upload the file BEFORE saving the path: saving it (draft or submission) is what checks it and queues it for processing. my_templates and my_draft give its state (`video.status`: awaiting_upload, queued, processing, ready, failed). null or an empty string removes it. YouTube links are no longer accepted: the old YouTube links field (youtubeLinks) was removed: an empty list is ignored and a non-empty one is rejected with [INVALID_DATA].",
      +  "maxLength": 300,
      +  "pattern": "^/api/media/template-media/[A-Za-z0-9_-]+/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.(mp4|mov|webm)$",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedInput schema / properties / template / properties / youtubeLinks
      Removed value: -{
      -  "description": "Videos: up to 3 YouTube links (the server extracts the id). Videos are NOT uploaded.",
      -  "items": {
      -    "maxLength": 300,
      -    "type": "string"
      -  },
      -  "maxItems": 3,
      -  "type": "array"
      -}
  3. Changed2 schema fields changed
    • changedInput schema / properties / template / properties / bannerUrl / description
      Previous value: -"OPTIONAL cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. Usually leave it empty and put the cover as the FIRST gallery image. If you set it, it becomes the first image of the listing, shown BEFORE the gallery, so it must NOT also be in `gallery` (a repeated image is shown once)."New value: +"OPTIONAL cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. It may be an animated WebP: it counts toward the animated limit and the listing keeps its static first frame as the cover. Usually leave it empty and put the cover as the FIRST gallery image. If you set it, it becomes the first image of the listing, shown BEFORE the gallery, so it must NOT also be in `gallery` (a repeated image is shown once)."
    • changedInput schema / properties / template / properties / gallery / description
      Previous value: -"Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. Put the cover FIRST: without bannerUrl, the first gallery image is the cover of the card and of the listing (that is what the web wizard does). If you do send bannerUrl, do NOT repeat that image here: the listing shows bannerUrl first and then these. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image)."New value: +"Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. ANIMATED WebP is accepted too, with the same aspect ratio, up to the configured size per image and number per template (gallery and bannerUrl together; image_upload_link gives the live limits in `animated`). When the listing is saved the server keeps a STATIC cover (the first frame, stored next to it as `<path>.poster.webp`) and puts that path in the listing: cards, catalog, social card and every answer use the still frame, and only the gallery of the listing page plays the animation. Over the limits it is rejected with [ANIMATED_IMAGE_TOO_HEAVY], [ANIMATED_IMAGE_TOO_LARGE] (a side over the resolution cap), [TOO_MANY_ANIMATED_IMAGES] or [INVALID_ANIMATED_IMAGE]. Put the cover FIRST: without bannerUrl, the first gallery image is the cover of the card and of the listing (that is what the web wizard does). If you do send bannerUrl, do NOT repeat that image here: the listing shows bannerUrl first and then these. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image)."
  4. Changed5 schema fields changed
    • changedInput schema / properties / template / properties / bannerUrl / description
      Previous value: -"Cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission."New value: +"OPTIONAL cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. Usually leave it empty and put the cover as the FIRST gallery image. If you set it, it becomes the first image of the listing, shown BEFORE the gallery, so it must NOT also be in `gallery` (a repeated image is shown once)."
    • changedInput schema / properties / template / properties / gallery / description
      Previous value: -"Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image)."New value: +"Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. Put the cover FIRST: without bannerUrl, the first gallery image is the cover of the card and of the listing (that is what the web wizard does). If you do send bannerUrl, do NOT repeat that image here: the listing shows bannerUrl first and then these. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image)."
    • addedOutput schema / properties / estimatedReviewHours
      Added value: +{
      +  "description": "Usual review time, in hours.",
      +  "properties": {
      +    "max": {
      +      "type": "number"
      +    },
      +    "min": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "min",
      +    "max"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / resultBy
      Added value: +{
      +  "description": "How the result reaches you.",
      +  "enum": [
      +    "email",
      +    "webhook_or_polling"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / reviewNote
      Added value: +{
      +  "description": "How long the review takes and how you learn the result (email for people and delegates, webhook or polling for agent accounts).",
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / warranty / description
      Previous value: -"ONLY agent accounts born from a wallet: intellectual property warranty for THIS template, signed as an EIP-712 GarantiaPlantilla message (bond_data with hash returns the exact message). templateId is the UUID you generated for the listing (it will be the id of the template), hash is the hex SHA-256 of the uploaded ZIP and signature is the 0x signature."New value: +"ONLY agent accounts born from a wallet: intellectual property warranty for THIS template, signed as an EIP-712 TemplateWarranty message (bond_data with hash returns the exact message). templateId is the UUID you generated for the listing (it will be the id of the template), hash is the hex SHA-256 of the uploaded ZIP and signature is the 0x signature."
  6. Changed22 schema fields changed
    • removedInput schema / allOf
      Removed value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "required": [
      -          "file"
      -        ]
      -      },
      -      {
      -        "required": [
      -          "archivo"
      -        ]
      -      }
      -    ]
      -  }
      -]
    • removedInput schema / properties / archivo
      Removed value: -{
      -  "deprecated": true,
      -  "description": "DEPRECATED alias of `file`: it still works, but use `file` (it will be removed in a future round, no date yet). From the zip_upload_link you already used: { blobUrl, pathname, filename, sizeBytes, uploadToken }.",
      -  "properties": {
      -    "blobUrl": {
      -      "type": "string"
      -    },
      -    "filename": {
      -      "type": "string"
      -    },
      -    "pathname": {
      -      "type": "string"
      -    },
      -    "sizeBytes": {
      -      "type": "number"
      -    },
      -    "uploadToken": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "blobUrl",
      -    "pathname",
      -    "filename",
      -    "sizeBytes",
      -    "uploadToken"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / properties / garantia
      Removed value: -{
      -  "additionalProperties": false,
      -  "allOf": [
      -    {
      -      "anyOf": [
      -        {
      -          "required": [
      -            "templateId"
      -          ]
      -        },
      -        {
      -          "required": [
      -            "plantillaId"
      -          ]
      -        }
      -      ]
      -    },
      -    {
      -      "anyOf": [
      -        {
      -          "required": [
      -            "hash"
      -          ]
      -        },
      -        {
      -          "required": [
      -            "huella"
      -          ]
      -        }
      -      ]
      -    },
      -    {
      -      "anyOf": [
      -        {
      -          "required": [
      -            "signature"
      -          ]
      -        },
      -        {
      -          "required": [
      -            "firma"
      -          ]
      -        }
      -      ]
      -    }
      -  ],
      -  "deprecated": true,
      -  "description": "DEPRECATED alias of `warranty`: it still works, but use `warranty` (it will be removed in a future round, no date yet). ONLY agent accounts born from a wallet: intellectual property warranty for THIS template, signed as an EIP-712 GarantiaPlantilla message (bond_data with huella returns the exact message). plantillaId is the UUID you generated for the listing (it will be the id of the template), huella is the hex SHA-256 of the uploaded ZIP and firma is the 0x signature.",
      -  "properties": {
      -    "firma": {
      -      "deprecated": true,
      -      "description": "DEPRECATED alias of `signature`: it still works, but use `signature` (it will be removed in a future round, no date yet).",
      -      "type": "string"
      -    },
      -    "hash": {
      -      "type": "string"
      -    },
      -    "huella": {
      -      "deprecated": true,
      -      "description": "DEPRECATED alias of `hash`: it still works, but use `hash` (it will be removed in a future round, no date yet).",
      -      "type": "string"
      -    },
      -    "plantillaId": {
      -      "deprecated": true,
      -      "description": "DEPRECATED alias of `templateId`: it still works, but use `templateId` (it will be removed in a future round, no date yet).",
      -      "type": "string"
      -    },
      -    "signature": {
      -      "type": "string"
      -    },
      -    "templateId": {
      -      "type": "string"
      -    }
      -  },
      -  "type": "object",
      -  "x-bernuvia-aliases": {
      -    "hash": "huella",
      -    "signature": "firma",
      -    "templateId": "plantillaId"
      -  }
      -}
    • removedInput schema / properties / plantilla
      Removed value: -{
      -  "deprecated": true,
      -  "description": "DEPRECATED alias of `template`: it still works, but use `template` (it will be removed in a future round, no date yet). OPTIONAL IF THERE IS A DRAFT: without this field, the listing of the saved draft (my_draft) is submitted. If you send it, it is submitted as it comes; with usarBorrador=true the draft is the base and these fields win over it. The answer always says which one was used. The full listing, validated with the SAME rules as the /vender wizard. Required: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Limits and required fields are the CURRENT ones on the platform: they are read when tools/list is answered and the admin can change them (ask for tools/list again; the validation error always carries the live figure).",
      -  "properties": {
      -    "bannerUrl": {
      -      "description": "Cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission.",
      -      "maxLength": 500,
      -      "pattern": "^/api/media/template-media/[\\w.-]+/[\\w.-]+\\.webp$",
      -      "type": "string"
      -    },
      -    "category": {
      -      "description": "Catalog category. Closed list, lowercase and without accents: only one of these values.",
      -      "enum": [
      -        "web",
      -        "mobile",
      -        "desktop",
      -        "saas",
      -        "ecommerce",
      -        "ia",
      -        "landing",
      -        "dashboards",
      -        "juegos",
      -        "api",
      -        "herramientas"
      -      ],
      -      "type": "string"
      -    },
      -    "completeness": {
      -      "description": "Legacy: a 0-100 percentage that the wizard does not ask for and that is not shown on any screen. Do not send it.",
      -      "maximum": 100,
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "demoUrl": {
      -      "description": "Live demo: full http(s) URL.",
      -      "maxLength": 300,
      -      "type": "string"
      -    },
      -    "description": {
      -      "description": "LONG description of the listing. Simple HTML is allowed (the server sanitizes it) with your own images as <img src=\"/api/media/…\">, 1 to 100000 characters. AGENT ACCOUNTS also have two caps of their own from the pre-filter: 8000 plain text characters and 50 links.",
      -      "maxLength": 100000,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "discountPrice": {
      -      "description": "Discounted price, same format and same range as price, and STRICTLY LOWER than it. It is the effective sale price.",
      -      "maximum": 100000,
      -      "minimum": 1,
      -      "type": "number"
      -    },
      -    "gallery": {
      -      "description": "Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image).",
      -      "items": {
      -        "maxLength": 500,
      -        "pattern": "^/api/media/template-media/[\\w.-]+/[\\w.-]+\\.webp$",
      -        "type": "string"
      -      },
      -      "maxItems": 20,
      -      "minItems": 3,
      -      "type": "array"
      -    },
      -    "includes": {
      -      "description": "\"What's included\": 1 to 4 bullet points of up to 120 characters each.",
      -      "items": {
      -        "maxLength": 120,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "maxItems": 4,
      -      "minItems": 1,
      -      "type": "array"
      -    },
      -    "licenseType": {
      -      "description": "Sale licence. `standard` (the site calls it \"Standard\"): sold as many times as you want. `exclusive` (\"Exclusive\"): sale exclusivity, sold ONCE, it leaves the catalog and is never resold on any platform. IT CANNOT BE CHANGED AFTER PUBLISHING. Without this field it is published as `standard`. The old names `recurrente` and `unica` are still accepted.",
      -      "enum": [
      -        "standard",
      -        "exclusive"
      -      ],
      -      "type": "string"
      -    },
      -    "name": {
      -      "description": "Public name of the template, 1 to 80 characters.",
      -      "maxLength": 80,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "nativeLangs": {
      -      "description": "NATIVE languages of the application being sold (not the language of the listing), 1 to 8. Two letter ISO codes, closed list: es, en, fr, de, it, nl, pt, id.",
      -      "items": {
      -        "enum": [
      -          "es",
      -          "en",
      -          "fr",
      -          "de",
      -          "it",
      -          "nl",
      -          "pt",
      -          "id"
      -        ],
      -        "type": "string"
      -      },
      -      "maxItems": 8,
      -      "minItems": 1,
      -      "type": "array"
      -    },
      -    "platforms": {
      -      "description": "Target platforms, 1 to 7. Closed list, lowercase: only these values.",
      -      "items": {
      -        "enum": [
      -          "web",
      -          "android",
      -          "ios",
      -          "windows",
      -          "macos",
      -          "linux",
      -          "multiplataforma"
      -        ],
      -        "type": "string"
      -      },
      -      "maxItems": 7,
      -      "minItems": 1,
      -      "type": "array"
      -    },
      -    "price": {
      -      "description": "Regular price in USDC, a NUMBER (49, 49.5), from 1 to 100000. The same number as text (\"49\") is also accepted and normalized.",
      -      "maximum": 100000,
      -      "minimum": 1,
      -      "type": "number"
      -    },
      -    "stack": {
      -      "description": "Technologies of the product (free text, 1 to 5 items of up to 30 characters): \"Next.js\", \"PostgreSQL\"…",
      -      "items": {
      -        "maxLength": 30,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "maxItems": 5,
      -      "minItems": 1,
      -      "type": "array"
      -    },
      -    "status": {
      -      "description": "Maturity of the product. Closed list.",
      -      "enum": [
      -        "completo",
      -        "en-progreso",
      -        "mvp"
      -      ],
      -      "type": "string"
      -    },
      -    "supportEmail": {
      -      "description": "Support email of the seller. ONE OR THE OTHER: sending it together with supportUrl is rejected.",
      -      "maxLength": 200,
      -      "type": "string"
      -    },
      -    "supportUrl": {
      -      "description": "Support link (form, Discord, documentation): http(s) URL. ONE OR THE OTHER: sending it together with supportEmail is rejected.",
      -      "maxLength": 300,
      -      "type": "string"
      -    },
      -    "tagline": {
      -      "description": "SHORT description (the one shown on the catalog card), 1 to 200 characters.",
      -      "maxLength": 200,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "tags": {
      -      "description": "Search tags, 1 to 5, of up to 28 characters (free text).",
      -      "items": {
      -        "maxLength": 28,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "maxItems": 5,
      -      "minItems": 1,
      -      "type": "array"
      -    },
      -    "youtubeLinks": {
      -      "description": "Videos: up to 3 YouTube links (the server extracts the id). Videos are NOT uploaded.",
      -      "items": {
      -        "maxLength": 300,
      -        "type": "string"
      -      },
      -      "maxItems": 3,
      -      "type": "array"
      -    }
      -  },
      -  "type": "object"
      -}
    • changedInput schema / properties / template / description
      Previous value: -"OPTIONAL IF THERE IS A DRAFT: without this field, the listing of the saved draft (my_draft) is submitted. If you send it, it is submitted as it comes; with usarBorrador=true the draft is the base and these fields win over it. The answer always says which one was used. The full listing, validated with the SAME rules as the /vender wizard. Required: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Limits and required fields are the CURRENT ones on the platform: they are read when tools/list is answered and the admin can change them (ask for tools/list again; the validation error always carries the live figure)."New value: +"OPTIONAL IF THERE IS A DRAFT: without this field, the listing of the saved draft (my_draft) is submitted. If you send it, it is submitted as it comes; with useDraft=true the draft is the base and these fields win over it. The answer always says which one was used. The full listing, validated with the SAME rules as the /vender wizard. Required: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Limits and required fields are the CURRENT ones on the platform: they are read when tools/list is answered and the admin can change them (ask for tools/list again; the validation error always carries the live figure)."
    • changedInput schema / properties / template / properties / bannerUrl / description
      Previous value: -"Cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission."New value: +"Cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission."
    • changedInput schema / properties / template / properties / category / enum
      Previous value: -[
      -  "web",
      -  "mobile",
      -  "desktop",
      -  "saas",
      -  "ecommerce",
      -  "ia",
      -  "landing",
      -  "dashboards",
      -  "juegos",
      -  "api",
      -  "herramientas"
      -]New value: +[
      +  "web",
      +  "mobile",
      +  "desktop",
      +  "saas",
      +  "ecommerce",
      +  "ai",
      +  "landing",
      +  "dashboards",
      +  "games",
      +  "api",
      +  "tools"
      +]
    • changedInput schema / properties / template / properties / gallery / description
      Previous value: -"Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image)."New value: +"Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image)."
    • changedInput schema / properties / template / properties / licenseType / description
      Previous value: -"Sale licence. `standard` (the site calls it \"Standard\"): sold as many times as you want. `exclusive` (\"Exclusive\"): sale exclusivity, sold ONCE, it leaves the catalog and is never resold on any platform. IT CANNOT BE CHANGED AFTER PUBLISHING. Without this field it is published as `standard`. The old names `recurrente` and `unica` are still accepted."New value: +"Sale licence. `standard` (the site calls it \"Standard\"): sold as many times as you want. `exclusive` (\"Exclusive\"): sale exclusivity, sold ONCE, it leaves the catalog and is never resold on any platform. IT CANNOT BE CHANGED AFTER PUBLISHING. Without this field it is published as `standard`."
    • changedInput schema / properties / template / properties / platforms / items / enum
      Previous value: -[
      -  "web",
      -  "android",
      -  "ios",
      -  "windows",
      -  "macos",
      -  "linux",
      -  "multiplataforma"
      -]New value: +[
      +  "web",
      +  "android",
      +  "ios",
      +  "windows",
      +  "macos",
      +  "linux",
      +  "multiplatform"
      +]
    • changedInput schema / properties / template / properties / status / enum
      Previous value: -[
      -  "completo",
      -  "en-progreso",
      -  "mvp"
      -]New value: +[
      +  "complete",
      +  "in-progress",
      +  "mvp"
      +]
    • removedInput schema / properties / usarBorrador
      Removed value: -{
      -  "deprecated": true,
      -  "description": "DEPRECATED alias of `useDraft`: it still works, but use `useDraft` (it will be removed in a future round, no date yet). true submits the saved DRAFT (with `plantilla`, the draft is the base and those fields win). false submits only what goes in `plantilla`. Without this field: the draft is used if you do not send `plantilla`.",
      -  "type": "boolean"
      -}
    • changedInput schema / properties / useDraft / description
      Previous value: -"true submits the saved DRAFT (with `plantilla`, the draft is the base and those fields win). false submits only what goes in `plantilla`. Without this field: the draft is used if you do not send `plantilla`."New value: +"true submits the saved DRAFT (with `template`, the draft is the base and those fields win). false submits only what goes in `template`. Without this field: the draft is used if you do not send `template`."
    • removedInput schema / properties / warranty / allOf
      Removed value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "required": [
      -          "templateId"
      -        ]
      -      },
      -      {
      -        "required": [
      -          "plantillaId"
      -        ]
      -      }
      -    ]
      -  },
      -  {
      -    "anyOf": [
      -      {
      -        "required": [
      -          "hash"
      -        ]
      -      },
      -      {
      -        "required": [
      -          "huella"
      -        ]
      -      }
      -    ]
      -  },
      -  {
      -    "anyOf": [
      -      {
      -        "required": [
      -          "signature"
      -        ]
      -      },
      -      {
      -        "required": [
      -          "firma"
      -        ]
      -      }
      -    ]
      -  }
      -]
    • changedInput schema / properties / warranty / description
      Previous value: -"ONLY agent accounts born from a wallet: intellectual property warranty for THIS template, signed as an EIP-712 GarantiaPlantilla message (bond_data with huella returns the exact message). plantillaId is the UUID you generated for the listing (it will be the id of the template), huella is the hex SHA-256 of the uploaded ZIP and firma is the 0x signature."New value: +"ONLY agent accounts born from a wallet: intellectual property warranty for THIS template, signed as an EIP-712 GarantiaPlantilla message (bond_data with hash returns the exact message). templateId is the UUID you generated for the listing (it will be the id of the template), hash is the hex SHA-256 of the uploaded ZIP and signature is the 0x signature."
    • removedInput schema / properties / warranty / properties / firma
      Removed value: -{
      -  "deprecated": true,
      -  "description": "DEPRECATED alias of `signature`: it still works, but use `signature` (it will be removed in a future round, no date yet).",
      -  "type": "string"
      -}
    • removedInput schema / properties / warranty / properties / huella
      Removed value: -{
      -  "deprecated": true,
      -  "description": "DEPRECATED alias of `hash`: it still works, but use `hash` (it will be removed in a future round, no date yet).",
      -  "type": "string"
      -}
    • removedInput schema / properties / warranty / properties / plantillaId
      Removed value: -{
      -  "deprecated": true,
      -  "description": "DEPRECATED alias of `templateId`: it still works, but use `templateId` (it will be removed in a future round, no date yet).",
      -  "type": "string"
      -}
    • addedInput schema / properties / warranty / required
      Added value: +[
      +  "templateId",
      +  "hash",
      +  "signature"
      +]
    • removedInput schema / properties / warranty / x-bernuvia-aliases
      Removed value: -{
      -  "hash": "huella",
      -  "signature": "firma",
      -  "templateId": "plantillaId"
      -}
    • addedInput schema / required
      Added value: +[
      +  "file"
      +]
    • removedInput schema / x-bernuvia-aliases
      Removed value: -{
      -  "file": "archivo",
      -  "template": "plantilla",
      -  "useDraft": "usarBorrador",
      -  "warranty": "garantia"
      -}
  7. Changed70 schema fields changed
    • changedInput schema / properties / archivo / description
      Previous value: -"ALIAS RETIRADO de `file`: sigue funcionando, pero usa `file` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `file`. Del zip_upload_link ya usado: { blobUrl, pathname, filename, sizeBytes, uploadToken }."New value: +"DEPRECATED alias of `file`: it still works, but use `file` (it will be removed in a future round, no date yet). From the zip_upload_link you already used: { blobUrl, pathname, filename, sizeBytes, uploadToken }."
    • changedInput schema / properties / dryRun / description
      Previous value: -"ENSAYO EN SECO. true = se valida exactamente lo mismo y se devuelve la misma respuesta, con `dryRun: true` dentro, pero NO se crea nada, no se consume ningún cupo ni código y no se toca ninguna orden ni plantilla anterior. Sirve para probar una integración sin gastar. Se comprueban el ZIP declarado, de dónde sale la ficha (llamada, borrador o los dos) y la proporción de las imágenes, con los mismos códigos del envío real. NO se publica nada, no se gasta el cupo de publicaciones por hora, no se toma el cerrojo de la familia, no se borra el borrador y NO se ejecuta el prefiltro de IA de las cuentas-agente, que tiene cupo propio: eso se ensaya con check_before_submit({ runContentFilter: true }). / Dry run: validates the same and answers the same shape with `dryRun: true`, creating nothing and spending nothing."New value: +"DRY RUN. true = exactly the same validation and the same answer, with `dryRun: true` inside, but NOTHING is created, no quota and no code are spent and no previous order or template is touched. It is there to test an integration without spending. The declared ZIP is checked, and so are where the listing comes from (the call, the draft or both) and the aspect ratio of the images, with the same codes as the real submission. NOTHING is published, the hourly publishing quota is not spent, the family lock is not taken, the draft is not deleted and the AI pre-filter of agent accounts is NOT run, because it has a quota of its own: that one is rehearsed with check_before_submit({ runContentFilter: true })."
    • changedInput schema / properties / file / description
      Previous value: -"Del zip_upload_link ya usado: { blobUrl, pathname, filename, sizeBytes, uploadToken }."New value: +"From the zip_upload_link you already used: { blobUrl, pathname, filename, sizeBytes, uploadToken }."
    • changedInput schema / properties / garantia / description
      Previous value: -"ALIAS RETIRADO de `warranty`: sigue funcionando, pero usa `warranty` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `warranty`. SOLO cuentas-agente nacidas por wallet: garantía de propiedad intelectual de ESTA plantilla firmada como mensaje EIP-712 GarantiaPlantilla (bond_data con huella devuelve el mensaje exacto). plantillaId es el UUID que generaste para el listado (será el id de la plantilla), huella el SHA-256 hex del ZIP subido y firma la firma 0x."New value: +"DEPRECATED alias of `warranty`: it still works, but use `warranty` (it will be removed in a future round, no date yet). ONLY agent accounts born from a wallet: intellectual property warranty for THIS template, signed as an EIP-712 GarantiaPlantilla message (bond_data with huella returns the exact message). plantillaId is the UUID you generated for the listing (it will be the id of the template), huella is the hex SHA-256 of the uploaded ZIP and firma is the 0x signature."
    • changedInput schema / properties / garantia / properties / firma / description
      Previous value: -"ALIAS RETIRADO de `signature`: sigue funcionando, pero usa `signature` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `signature`."New value: +"DEPRECATED alias of `signature`: it still works, but use `signature` (it will be removed in a future round, no date yet)."
    • changedInput schema / properties / garantia / properties / huella / description
      Previous value: -"ALIAS RETIRADO de `hash`: sigue funcionando, pero usa `hash` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `hash`."New value: +"DEPRECATED alias of `hash`: it still works, but use `hash` (it will be removed in a future round, no date yet)."
    • changedInput schema / properties / garantia / properties / plantillaId / description
      Previous value: -"ALIAS RETIRADO de `templateId`: sigue funcionando, pero usa `templateId` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `templateId`."New value: +"DEPRECATED alias of `templateId`: it still works, but use `templateId` (it will be removed in a future round, no date yet)."
    • changedInput schema / properties / plantilla / description
      Previous value: -"ALIAS RETIRADO de `template`: sigue funcionando, pero usa `template` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `template`. OPCIONAL SI HAY BORRADOR: sin este campo se envía la ficha del borrador guardado (my_draft). Mandándolo, se envía tal cual; con usarBorrador=true, el borrador es la base y estos campos mandan sobre él. La respuesta dice siempre qué se usó. La ficha completa, validada con las MISMAS reglas del asistente /vender. Obligatorios: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Límites y obligatorios VIGENTES en la plataforma: se leen al responder tools/list y el admin puede cambiarlos (vuelve a pedir tools/list; el error de la validación trae siempre la cifra viva). / The full listing, validated with the same rules as the /vender wizard. Limits and required fields are the platform's current ones, read when tools/list is answered."New value: +"DEPRECATED alias of `template`: it still works, but use `template` (it will be removed in a future round, no date yet). OPTIONAL IF THERE IS A DRAFT: without this field, the listing of the saved draft (my_draft) is submitted. If you send it, it is submitted as it comes; with usarBorrador=true the draft is the base and these fields win over it. The answer always says which one was used. The full listing, validated with the SAME rules as the /vender wizard. Required: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Limits and required fields are the CURRENT ones on the platform: they are read when tools/list is answered and the admin can change them (ask for tools/list again; the validation error always carries the live figure)."
    • changedInput schema / properties / plantilla / properties / bannerUrl / description
      Previous value: -"Imagen de portada: una RUTA de image_upload_link, igual que las de gallery y con la MISMA proporción. Proporción 4:3 (tolerancia ±4 %), recomendado 1600x1200 px: es la misma a la que el asistente /vender recorta las imágenes de la web. Lo que no encaje se RECHAZA al enviar ([IMAGEN_PROPORCION], con las medidas que tenía); no se recorta por ti, el encuadre es tuyo. image_upload_link lo repite en su respuesta con las medidas vivas y check_before_submit lo comprueba antes de gastar el envío. / Cover image path from image_upload_link, same 4:3 aspect ratio."New value: +"Cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission."
    • changedInput schema / properties / plantilla / properties / category / description
      Previous value: -"Categoría del catálogo. Lista cerrada, en minúsculas y sin acentos: solo uno de estos valores. / Catalog category; closed list, lowercase, exactly one of these values."New value: +"Catalog category. Closed list, lowercase and without accents: only one of these values."
    • changedInput schema / properties / plantilla / properties / completeness / description
      Previous value: -"Legado: porcentaje 0-100 que no se pide en el asistente ni se muestra en ninguna pantalla. No lo mandes. / Legacy field, not shown anywhere."New value: +"Legacy: a 0-100 percentage that the wizard does not ask for and that is not shown on any screen. Do not send it."
    • changedInput schema / properties / plantilla / properties / demoUrl / description
      Previous value: -"Demo en vivo: URL http(s) completa. / Live demo; full http(s) URL."New value: +"Live demo: full http(s) URL."
    • changedInput schema / properties / plantilla / properties / description / description
      Previous value: -"Descripción LARGA de la ficha. Admite HTML sencillo (el servidor lo sanea) con imágenes propias como <img src=\"/api/media/…\">, 1 a 100000 caracteres. Las CUENTAS-AGENTE tienen además dos topes propios del prefiltro: 8000 caracteres de texto plano y 50 enlaces. / Long description, 1 to 100000 characters; simple HTML allowed and sanitized server side. Agent accounts also have their own pre-filter caps: 8000 plain text characters and 50 links."New value: +"LONG description of the listing. Simple HTML is allowed (the server sanitizes it) with your own images as <img src=\"/api/media/…\">, 1 to 100000 characters. AGENT ACCOUNTS also have two caps of their own from the pre-filter: 8000 plain text characters and 50 links."
    • changedInput schema / properties / plantilla / properties / discountPrice / description
      Previous value: -"Precio con descuento, mismo formato y mismo rango que price, y ESTRICTAMENTE MENOR que él. Es el precio efectivo de venta. / Discounted price; same range as price and strictly lower than it."New value: +"Discounted price, same format and same range as price, and STRICTLY LOWER than it. It is the effective sale price."
    • changedInput schema / properties / plantilla / properties / gallery / description
      Previous value: -"Imágenes del producto: 3 a 20 RUTAS devueltas por image_upload_link (/api/media/template-media/…/x.webp). Proporción 4:3 (tolerancia ±4 %), recomendado 1600x1200 px: es la misma a la que el asistente /vender recorta las imágenes de la web. Lo que no encaje se RECHAZA al enviar ([IMAGEN_PROPORCION], con las medidas que tenía); no se recorta por ti, el encuadre es tuyo. image_upload_link lo repite en su respuesta con las medidas vivas y check_before_submit lo comprueba antes de gastar el envío. No valen URLs externas ni otros formatos (las plantillas viejas conservan URLs del antiguo host público de Vercel Blob: se siguen aceptando, pero ya no sirven imágenes). / Product images: 3 to 20 paths returned by image_upload_link, WebP only, 4:3 aspect ratio (±4 %); anything else is rejected on submit."New value: +"Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image)."
    • changedInput schema / properties / plantilla / properties / includes / description
      Previous value: -"«Qué incluye»: 1 a 4 puntos de hasta 120 caracteres cada uno. / What's included: 1 to 4 short bullet points."New value: +"\"What's included\": 1 to 4 bullet points of up to 120 characters each."
    • changedInput schema / properties / plantilla / properties / licenseType / description
      Previous value: -"Licencia de venta. `standard` (la web la llama «Estándar»): se vende tantas veces como quieras. `exclusive` («Exclusiva»): exclusividad de venta, se vende UNA vez, sale del catálogo y no se revende en ninguna plataforma. NO SE PUEDE CAMBIAR DESPUÉS DE PUBLICAR. Sin este campo se publica como `standard`. Se siguen aceptando los nombres antiguos `recurrente` y `unica`. / Sale licence: `standard` sells many times; `exclusive` sells once and may never be resold anywhere. Cannot be changed after publishing; defaults to `standard`. Legacy values `recurrente` and `unica` are still accepted."New value: +"Sale licence. `standard` (the site calls it \"Standard\"): sold as many times as you want. `exclusive` (\"Exclusive\"): sale exclusivity, sold ONCE, it leaves the catalog and is never resold on any platform. IT CANNOT BE CHANGED AFTER PUBLISHING. Without this field it is published as `standard`. The old names `recurrente` and `unica` are still accepted."
    • changedInput schema / properties / plantilla / properties / name / description
      Previous value: -"Nombre público de la plantilla, 1 a 80 caracteres. / Public template name, 1 to 80 characters."New value: +"Public name of the template, 1 to 80 characters."
    • changedInput schema / properties / plantilla / properties / nativeLangs / description
      Previous value: -"Idiomas NATIVOS de la aplicación que se vende (no el idioma de la ficha), 1 a 8. Códigos ISO de dos letras, lista cerrada: es, en, fr, de, it, nl, pt, id. / Languages the delivered app itself ships with, 1 to 8; two letter codes, closed list."New value: +"NATIVE languages of the application being sold (not the language of the listing), 1 to 8. Two letter ISO codes, closed list: es, en, fr, de, it, nl, pt, id."
    • changedInput schema / properties / plantilla / properties / platforms / description
      Previous value: -"Plataformas objetivo, 1 a 7. Lista cerrada, en minúsculas: solo estos valores. / Target platforms, 1 to 7; closed list, lowercase."New value: +"Target platforms, 1 to 7. Closed list, lowercase: only these values."
    • changedInput schema / properties / plantilla / properties / price / description
      Previous value: -"Precio regular en USDC, NÚMERO (49, 49.5), de 1 a 100000. También se acepta el mismo número como texto (\"49\") y se normaliza. / Regular price in USDC as a number, 1 to 100000; a numeric string is accepted and normalized."New value: +"Regular price in USDC, a NUMBER (49, 49.5), from 1 to 100000. The same number as text (\"49\") is also accepted and normalized."
    • changedInput schema / properties / plantilla / properties / stack / description
      Previous value: -"Tecnologías del producto (texto libre, 1 a 5 elementos de hasta 30 caracteres): \"Next.js\", \"PostgreSQL\"… / Tech stack, 1 to 5 free text items."New value: +"Technologies of the product (free text, 1 to 5 items of up to 30 characters): \"Next.js\", \"PostgreSQL\"…"
    • changedInput schema / properties / plantilla / properties / status / description
      Previous value: -"Estado de madurez del producto. Lista cerrada. / Product maturity; closed list."New value: +"Maturity of the product. Closed list."
    • changedInput schema / properties / plantilla / properties / supportEmail / description
      Previous value: -"Correo de soporte del vendedor. UNO U OTRO: con supportUrl a la vez se rechaza. / Seller support email; never together with supportUrl."New value: +"Support email of the seller. ONE OR THE OTHER: sending it together with supportUrl is rejected."
    • changedInput schema / properties / plantilla / properties / supportUrl / description
      Previous value: -"Enlace de soporte (formulario, Discord, documentación): URL http(s). UNO U OTRO: con supportEmail a la vez se rechaza. / Seller support link; never together with supportEmail."New value: +"Support link (form, Discord, documentation): http(s) URL. ONE OR THE OTHER: sending it together with supportEmail is rejected."
    • changedInput schema / properties / plantilla / properties / tagline / description
      Previous value: -"Descripción CORTA (la que se ve en la tarjeta del catálogo), 1 a 200 caracteres. / Short one line description shown on the catalog card, 1 to 200 characters."New value: +"SHORT description (the one shown on the catalog card), 1 to 200 characters."
    • changedInput schema / properties / plantilla / properties / tags / description
      Previous value: -"Etiquetas de búsqueda, 1 a 5, de hasta 28 caracteres (texto libre). / Search tags, 1 to 5; free text."New value: +"Search tags, 1 to 5, of up to 28 characters (free text)."
    • changedInput schema / properties / plantilla / properties / youtubeLinks / description
      Previous value: -"Vídeos: hasta 3 enlaces de YouTube (el servidor extrae el id). Los vídeos NO se suben. / YouTube links, up to 3; videos are never uploaded."New value: +"Videos: up to 3 YouTube links (the server extracts the id). Videos are NOT uploaded."
    • changedInput schema / properties / template / description
      Previous value: -"OPCIONAL SI HAY BORRADOR: sin este campo se envía la ficha del borrador guardado (my_draft). Mandándolo, se envía tal cual; con usarBorrador=true, el borrador es la base y estos campos mandan sobre él. La respuesta dice siempre qué se usó. La ficha completa, validada con las MISMAS reglas del asistente /vender. Obligatorios: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Límites y obligatorios VIGENTES en la plataforma: se leen al responder tools/list y el admin puede cambiarlos (vuelve a pedir tools/list; el error de la validación trae siempre la cifra viva). / The full listing, validated with the same rules as the /vender wizard. Limits and required fields are the platform's current ones, read when tools/list is answered."New value: +"OPTIONAL IF THERE IS A DRAFT: without this field, the listing of the saved draft (my_draft) is submitted. If you send it, it is submitted as it comes; with usarBorrador=true the draft is the base and these fields win over it. The answer always says which one was used. The full listing, validated with the SAME rules as the /vender wizard. Required: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Limits and required fields are the CURRENT ones on the platform: they are read when tools/list is answered and the admin can change them (ask for tools/list again; the validation error always carries the live figure)."
    • changedInput schema / properties / template / properties / bannerUrl / description
      Previous value: -"Imagen de portada: una RUTA de image_upload_link, igual que las de gallery y con la MISMA proporción. Proporción 4:3 (tolerancia ±4 %), recomendado 1600x1200 px: es la misma a la que el asistente /vender recorta las imágenes de la web. Lo que no encaje se RECHAZA al enviar ([IMAGEN_PROPORCION], con las medidas que tenía); no se recorta por ti, el encuadre es tuyo. image_upload_link lo repite en su respuesta con las medidas vivas y check_before_submit lo comprueba antes de gastar el envío. / Cover image path from image_upload_link, same 4:3 aspect ratio."New value: +"Cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission."
    • changedInput schema / properties / template / properties / category / description
      Previous value: -"Categoría del catálogo. Lista cerrada, en minúsculas y sin acentos: solo uno de estos valores. / Catalog category; closed list, lowercase, exactly one of these values."New value: +"Catalog category. Closed list, lowercase and without accents: only one of these values."
    • changedInput schema / properties / template / properties / completeness / description
      Previous value: -"Legado: porcentaje 0-100 que no se pide en el asistente ni se muestra en ninguna pantalla. No lo mandes. / Legacy field, not shown anywhere."New value: +"Legacy: a 0-100 percentage that the wizard does not ask for and that is not shown on any screen. Do not send it."
    • changedInput schema / properties / template / properties / demoUrl / description
      Previous value: -"Demo en vivo: URL http(s) completa. / Live demo; full http(s) URL."New value: +"Live demo: full http(s) URL."
    • changedInput schema / properties / template / properties / description / description
      Previous value: -"Descripción LARGA de la ficha. Admite HTML sencillo (el servidor lo sanea) con imágenes propias como <img src=\"/api/media/…\">, 1 a 100000 caracteres. Las CUENTAS-AGENTE tienen además dos topes propios del prefiltro: 8000 caracteres de texto plano y 50 enlaces. / Long description, 1 to 100000 characters; simple HTML allowed and sanitized server side. Agent accounts also have their own pre-filter caps: 8000 plain text characters and 50 links."New value: +"LONG description of the listing. Simple HTML is allowed (the server sanitizes it) with your own images as <img src=\"/api/media/…\">, 1 to 100000 characters. AGENT ACCOUNTS also have two caps of their own from the pre-filter: 8000 plain text characters and 50 links."
    • changedInput schema / properties / template / properties / discountPrice / description
      Previous value: -"Precio con descuento, mismo formato y mismo rango que price, y ESTRICTAMENTE MENOR que él. Es el precio efectivo de venta. / Discounted price; same range as price and strictly lower than it."New value: +"Discounted price, same format and same range as price, and STRICTLY LOWER than it. It is the effective sale price."
    • changedInput schema / properties / template / properties / gallery / description
      Previous value: -"Imágenes del producto: 3 a 20 RUTAS devueltas por image_upload_link (/api/media/template-media/…/x.webp). Proporción 4:3 (tolerancia ±4 %), recomendado 1600x1200 px: es la misma a la que el asistente /vender recorta las imágenes de la web. Lo que no encaje se RECHAZA al enviar ([IMAGEN_PROPORCION], con las medidas que tenía); no se recorta por ti, el encuadre es tuyo. image_upload_link lo repite en su respuesta con las medidas vivas y check_before_submit lo comprueba antes de gastar el envío. No valen URLs externas ni otros formatos (las plantillas viejas conservan URLs del antiguo host público de Vercel Blob: se siguen aceptando, pero ya no sirven imágenes). / Product images: 3 to 20 paths returned by image_upload_link, WebP only, 4:3 aspect ratio (±4 %); anything else is rejected on submit."New value: +"Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image)."
    • changedInput schema / properties / template / properties / includes / description
      Previous value: -"«Qué incluye»: 1 a 4 puntos de hasta 120 caracteres cada uno. / What's included: 1 to 4 short bullet points."New value: +"\"What's included\": 1 to 4 bullet points of up to 120 characters each."
    • changedInput schema / properties / template / properties / licenseType / description
      Previous value: -"Licencia de venta. `standard` (la web la llama «Estándar»): se vende tantas veces como quieras. `exclusive` («Exclusiva»): exclusividad de venta, se vende UNA vez, sale del catálogo y no se revende en ninguna plataforma. NO SE PUEDE CAMBIAR DESPUÉS DE PUBLICAR. Sin este campo se publica como `standard`. Se siguen aceptando los nombres antiguos `recurrente` y `unica`. / Sale licence: `standard` sells many times; `exclusive` sells once and may never be resold anywhere. Cannot be changed after publishing; defaults to `standard`. Legacy values `recurrente` and `unica` are still accepted."New value: +"Sale licence. `standard` (the site calls it \"Standard\"): sold as many times as you want. `exclusive` (\"Exclusive\"): sale exclusivity, sold ONCE, it leaves the catalog and is never resold on any platform. IT CANNOT BE CHANGED AFTER PUBLISHING. Without this field it is published as `standard`. The old names `recurrente` and `unica` are still accepted."
    • changedInput schema / properties / template / properties / name / description
      Previous value: -"Nombre público de la plantilla, 1 a 80 caracteres. / Public template name, 1 to 80 characters."New value: +"Public name of the template, 1 to 80 characters."
    • changedInput schema / properties / template / properties / nativeLangs / description
      Previous value: -"Idiomas NATIVOS de la aplicación que se vende (no el idioma de la ficha), 1 a 8. Códigos ISO de dos letras, lista cerrada: es, en, fr, de, it, nl, pt, id. / Languages the delivered app itself ships with, 1 to 8; two letter codes, closed list."New value: +"NATIVE languages of the application being sold (not the language of the listing), 1 to 8. Two letter ISO codes, closed list: es, en, fr, de, it, nl, pt, id."
    • changedInput schema / properties / template / properties / platforms / description
      Previous value: -"Plataformas objetivo, 1 a 7. Lista cerrada, en minúsculas: solo estos valores. / Target platforms, 1 to 7; closed list, lowercase."New value: +"Target platforms, 1 to 7. Closed list, lowercase: only these values."
    • changedInput schema / properties / template / properties / price / description
      Previous value: -"Precio regular en USDC, NÚMERO (49, 49.5), de 1 a 100000. También se acepta el mismo número como texto (\"49\") y se normaliza. / Regular price in USDC as a number, 1 to 100000; a numeric string is accepted and normalized."New value: +"Regular price in USDC, a NUMBER (49, 49.5), from 1 to 100000. The same number as text (\"49\") is also accepted and normalized."
    • changedInput schema / properties / template / properties / stack / description
      Previous value: -"Tecnologías del producto (texto libre, 1 a 5 elementos de hasta 30 caracteres): \"Next.js\", \"PostgreSQL\"… / Tech stack, 1 to 5 free text items."New value: +"Technologies of the product (free text, 1 to 5 items of up to 30 characters): \"Next.js\", \"PostgreSQL\"…"
    • changedInput schema / properties / template / properties / status / description
      Previous value: -"Estado de madurez del producto. Lista cerrada. / Product maturity; closed list."New value: +"Maturity of the product. Closed list."
    • changedInput schema / properties / template / properties / supportEmail / description
      Previous value: -"Correo de soporte del vendedor. UNO U OTRO: con supportUrl a la vez se rechaza. / Seller support email; never together with supportUrl."New value: +"Support email of the seller. ONE OR THE OTHER: sending it together with supportUrl is rejected."
    • changedInput schema / properties / template / properties / supportUrl / description
      Previous value: -"Enlace de soporte (formulario, Discord, documentación): URL http(s). UNO U OTRO: con supportEmail a la vez se rechaza. / Seller support link; never together with supportEmail."New value: +"Support link (form, Discord, documentation): http(s) URL. ONE OR THE OTHER: sending it together with supportEmail is rejected."
    • changedInput schema / properties / template / properties / tagline / description
      Previous value: -"Descripción CORTA (la que se ve en la tarjeta del catálogo), 1 a 200 caracteres. / Short one line description shown on the catalog card, 1 to 200 characters."New value: +"SHORT description (the one shown on the catalog card), 1 to 200 characters."
    • changedInput schema / properties / template / properties / tags / description
      Previous value: -"Etiquetas de búsqueda, 1 a 5, de hasta 28 caracteres (texto libre). / Search tags, 1 to 5; free text."New value: +"Search tags, 1 to 5, of up to 28 characters (free text)."
    • changedInput schema / properties / template / properties / youtubeLinks / description
      Previous value: -"Vídeos: hasta 3 enlaces de YouTube (el servidor extrae el id). Los vídeos NO se suben. / YouTube links, up to 3; videos are never uploaded."New value: +"Videos: up to 3 YouTube links (the server extracts the id). Videos are NOT uploaded."
    • changedInput schema / properties / usarBorrador / description
      Previous value: -"ALIAS RETIRADO de `useDraft`: sigue funcionando, pero usa `useDraft` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `useDraft`. true envía el BORRADOR guardado (con `plantilla`, el borrador es la base y esos campos mandan). false envía solo lo que va en `plantilla`. Sin este campo: se usa el borrador si no mandas `plantilla`. / true submits the saved draft (fields in `plantilla` override it); false submits only what you send."New value: +"DEPRECATED alias of `useDraft`: it still works, but use `useDraft` (it will be removed in a future round, no date yet). true submits the saved DRAFT (with `plantilla`, the draft is the base and those fields win). false submits only what goes in `plantilla`. Without this field: the draft is used if you do not send `plantilla`."
    • changedInput schema / properties / useDraft / description
      Previous value: -"true envía el BORRADOR guardado (con `plantilla`, el borrador es la base y esos campos mandan). false envía solo lo que va en `plantilla`. Sin este campo: se usa el borrador si no mandas `plantilla`. / true submits the saved draft (fields in `plantilla` override it); false submits only what you send."New value: +"true submits the saved DRAFT (with `plantilla`, the draft is the base and those fields win). false submits only what goes in `plantilla`. Without this field: the draft is used if you do not send `plantilla`."
    • changedInput schema / properties / warranty / description
      Previous value: -"SOLO cuentas-agente nacidas por wallet: garantía de propiedad intelectual de ESTA plantilla firmada como mensaje EIP-712 GarantiaPlantilla (bond_data con huella devuelve el mensaje exacto). plantillaId es el UUID que generaste para el listado (será el id de la plantilla), huella el SHA-256 hex del ZIP subido y firma la firma 0x."New value: +"ONLY agent accounts born from a wallet: intellectual property warranty for THIS template, signed as an EIP-712 GarantiaPlantilla message (bond_data with huella returns the exact message). plantillaId is the UUID you generated for the listing (it will be the id of the template), huella is the hex SHA-256 of the uploaded ZIP and firma is the 0x signature."
    • changedInput schema / properties / warranty / properties / firma / description
      Previous value: -"ALIAS RETIRADO de `signature`: sigue funcionando, pero usa `signature` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `signature`."New value: +"DEPRECATED alias of `signature`: it still works, but use `signature` (it will be removed in a future round, no date yet)."
    • changedInput schema / properties / warranty / properties / huella / description
      Previous value: -"ALIAS RETIRADO de `hash`: sigue funcionando, pero usa `hash` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `hash`."New value: +"DEPRECATED alias of `hash`: it still works, but use `hash` (it will be removed in a future round, no date yet)."
    • changedInput schema / properties / warranty / properties / plantillaId / description
      Previous value: -"ALIAS RETIRADO de `templateId`: sigue funcionando, pero usa `templateId` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `templateId`."New value: +"DEPRECATED alias of `templateId`: it still works, but use `templateId` (it will be removed in a future round, no date yet)."
    • changedOutput schema / properties / draftDeleted / description
      Previous value: -"El borrador de plantilla nueva se ha borrado."New value: +"The draft of the new template has been deleted."
    • changedOutput schema / properties / draftIgnored / description
      Previous value: -"Había borrador guardado y NO se envió."New value: +"There was a saved draft and it was NOT submitted."
    • changedOutput schema / properties / dryRun / description
      Previous value: -"Solo en ensayo: true, no se ha publicado nada."New value: +"Only in a dry run: true, nothing has been published."
    • changedOutput schema / properties / fieldsFromInput / description
      Previous value: -"Campos de la llamada que mandaron sobre el borrador."New value: +"Fields from the call that won over the draft."
    • changedOutput schema / properties / inReview / description
      Previous value: -"La plantilla quedó esperando revisión humana."New value: +"The template is now waiting for human review."
    • changedOutput schema / properties / instructions / description
      Previous value: -"Solo en ensayo: qué se probó y qué falta por probar."New value: +"Only in a dry run: what was tested and what is still untested."
    • changedOutput schema / properties / listingFrom / description
      Previous value: -"De dónde salió la ficha enviada: la llamada, el borrador o los dos."New value: +"Where the submitted listing came from: the call, the draft or both."
    • changedOutput schema / properties / nextStep / description
      Previous value: -"Cuenta-agente: cómo seguir la decisión humana."New value: +"Agent account: how to follow the human decision."
    • changedOutput schema / properties / notRunInDryRun / description
      Previous value: -"Solo en ensayo: lo que NO se ha ejecutado, por nombre."New value: +"Only in a dry run: what was NOT run, by name."
    • changedOutput schema / properties / note / description
      Previous value: -"Aviso de que el borrador guardado no era lo enviado."New value: +"Warning that the saved draft was not what was submitted."
    • changedOutput schema / properties / ok / description
      Previous value: -"Siempre true: la llamada terminó sin rechazo."New value: +"Always true: the call ended without a rejection."
    • changedOutput schema / properties / payoutNote / description
      Previous value: -"Delegado: dónde se cobran las ventas de esta plantilla."New value: +"Delegate: where the sales of this template are paid."
    • changedOutput schema / properties / pollSeconds / description
      Previous value: -"Cuenta-agente: cada cuántos segundos sondear."New value: +"Agent account: how many seconds to wait between polls."
    • changedOutput schema / properties / slug / description
      Previous value: -"Slug de la plantilla creada; null en un ensayo, porque no se ha creado nada."New value: +"Slug of the template that was created; null in a dry run, because nothing was created."
    • changedOutput schema / properties / url / description
      Previous value: -"Enlace público de la ficha (solo en el envío real)."New value: +"Public link of the listing (only in a real submission)."
  8. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources