Add one block to a bio page. Types: link, featured, header, email, latestposts, embed, text, image, gallery, faq, divider, product, event, presave, episode, booking, hours, collection. Required fields per type — link/featured: url; product: title+url; event: title+startDate; presave: title+releaseDate+links; episode: mode plus title+url (manual) or feedUrl (rss); booking: provider+url; hours: timezone+days; header: text; text: richText; image: imageUrl; gallery: images; faq: faqItems; embed: embedUrl from a supported provider; email/latestposts/divider: none. All URLs must be http(s). The response returns the block AS STORED, so any field the server rejected is visibly absent. Calling twice with the same type+url returns the existing block instead of duplicating it. The phase field stages a block around a release date: 'before' shows it only until the drop, 'after' only from the drop onwards, and 'always' clears the staging so it shows either way. Phase has NO effect until a campaign is set in the dashboard — check get_mini_site.campaign first and tell the user if it is null.