Cofounder CLI
Domains
Find and buy a domain or bring your own, point it at the company's hosting, and manage its DNS and email sending.
A company's address is a domain it owns. Cofounder can buy one for you or adopt one you already registered elsewhere, then wire it to the deployed app and to company email.
Find and buy one
| MCP | CLI | API |
|---|---|---|
domains_discover | cofounder domains discover --query <keyword> | POST /cofounder-cli/v1/company/domains/discover |
domains_check | cofounder domains check --domain-name <domain> | POST /cofounder-cli/v1/company/domains/check |
domains_contact_schema_get | cofounder domains contact-schema get --domain-name <domain> | GET /cofounder-cli/v1/company/domains/contact-schema |
domains_purchase | cofounder domains purchase --domain-name <domain> --expected-price <cents> --auto-renew | POST /cofounder-cli/v1/company/domains/purchases |
domains_orders_get | cofounder domains orders get --order-id <order-id> | GET /cofounder-cli/v1/company/domains/orders/{order_id} |
discover suggests names from a keyword and checks each with the registrar;
on MCP it opens the domain purchaser to pick from. check quotes one exact
name. purchase needs that quote as --expected-price (USD cents) plus
registrant details from --contact-file, and debits the company balance.
contact-schema get lists the registrant fields the registrar requires for
that name. A purchase can come back pending: check cofounder domains list
or the order with orders get before trying again.
Completed purchases and orders return next_steps to provision an email
inbox on the purchased domain. The CLI prints the next command; choose the
mailbox name for --local-part before running it. Pending purchases return
a polling step, including the order receipt when available. domains get
reports ownership, connection state, usage readiness, and the required domain
action. See Email for
inbox provisioning and its billing rules.
cofounder domains search --domain-name <domain> is an older way to check
several exact names at once; use check or discover instead.
Bring your own
cofounder domains import acme.com --project <hosting-resource> --waitImport saves a domain registered elsewhere without transferring it or
touching its DNS. Point it at hosting, add the DNS records it reports, then
cofounder domains ownership prove confirms the records are live.
With --wait, import keeps checking the ownership TXT record, attaches the
hostname once ownership is proven, and waits for DNS and hosting verification.
External DNS stays at your provider; import does not change your nameservers.
Point it at the app
cofounder domains attach --targets <json> assigns hostnames under the
selected domain to hosting resources (ids from resources list). Ownership
must be proven before the hosting provider can attach them. External DNS stays
at your provider: publish the returned records there, then refresh domain status
to check DNS and hosting verification. The response reports those checks
separately from the hosting assignment.
An existing hosting assignment can move only when the selected domain's ownership proof outranks the existing holder's proof. Equal or weaker proof is refused.
DNS
For domains Cofounder manages, DNS is yours to edit. Every command acts on
the company's default domain; pass --resource <domain> to pick another.
| MCP | CLI | API |
|---|---|---|
domains_dns_records_list | cofounder domains dns-records list | GET /cofounder-cli/v1/company/domains/dns-records |
domains_dns_records_get | cofounder domains dns-records get --record-id <id> | GET /cofounder-cli/v1/company/domains/dns-records/{record_id} |
domains_dns_records_create | cofounder domains dns-records create --type TXT --name @ --value <value> --ttl 300 | POST /cofounder-cli/v1/company/domains/dns-records |
domains_dns_records_update | cofounder domains dns-records update --record-id <id> --value <value> | PATCH /cofounder-cli/v1/company/domains/dns-records/{record_id} |
domains_dns_records_delete | cofounder domains dns-records delete --record-id <id> | DELETE /cofounder-cli/v1/company/domains/dns-records/{record_id} |
domains_dns_records_apply | cofounder domains dns-records apply --records <json> --dry-run | POST /cofounder-cli/v1/company/domains/dns-records/apply |
Record ids come from list. create takes any common record type (A, AAAA,
ALIAS, CAA, CNAME, HTTPS, MX, NS, SRV, TXT); --priority applies to MX and
SRV, --srv and --https to their own types. create isn't safe to repeat: if
one doesn't report a clear result, list records before trying again. apply
is safe to run again (records that already exist are left alone), and
--dry-run shows what it would change first. update changes only the
fields you pass.
Check and move DNS
| MCP | CLI | API |
|---|---|---|
domains_dns_records_instructions_get | cofounder domains dns-records instructions get --format apply | GET /cofounder-cli/v1/company/domains/dns-records/instructions |
domains_dns_records_audit | cofounder domains dns-records audit | GET /cofounder-cli/v1/company/domains/dns-records/audit |
domains_dns_records_migration_get | cofounder domains dns-records migration get | GET /cofounder-cli/v1/company/domains/dns-records/migration |
domains_nameservers_update | cofounder domains nameservers update --nameserver <host> --nameserver <host> | PATCH /cofounder-cli/v1/company/domains/nameservers |
instructions get lists the records the app, staging, and marketing sites
need. For a domain you brought yourself, Cofounder can't edit its DNS, so
add these at your DNS host; --format apply prints them ready for
dns-records apply --records. audit compares live DNS with that list and
marks each record present, mismatched, or missing. migration get returns
the steps for moving a domain's DNS onto Cofounder: capture the current
records, dry-run and then run apply (it also takes --zone-file), audit,
point the registrar at the new nameservers, and watch verification.
nameservers update replaces the domain's full nameserver list at the
registrar, which changes where all of its DNS is served. Run it with no
--nameserver to go back to the registrar's own nameservers.
Email sending
| MCP | CLI | API |
|---|---|---|
domains_sending_domain_ensure | cofounder domains sending-domain ensure | POST /cofounder-cli/v1/company/domains/sending-domain |
domains_sending_domain_get | cofounder domains sending-domain get --binding-id <sender-id> | GET /cofounder-cli/v1/company/domains/sending-domain |
domains_shared_sending_domain_ensure | cofounder domains shared-sending-domain ensure | POST /cofounder-cli/v1/company/domains/shared-sending-domain |
sending-domain ensure sets up send.<domain> for company email. When
Cofounder manages its active DNS zone, it publishes missing sender records
without replacing existing records. Otherwise, it returns the records to
publish at your DNS provider. The response explains whether DNS needs your
attention or provider verification is pending.
Use the returned sender binding_id with sending-domain get to read readiness
without rerunning setup. --wait follows provider checks when they can proceed
automatically and stops when DNS publication or compliance information needs
manual action. Sending becomes ready only after Mailtrap verifies DNS and
approves compliance.
shared-sending-domain ensure sets up a sender under cofounder.company for
the app's email and publishes its DNS records itself; the app sends from it
only once it reports ready. Both are safe to run again.
Status, registrant, and renewals
| MCP | CLI | API |
|---|---|---|
domains_get | cofounder domains get | GET /cofounder-cli/v1/company/domains/detail |
domains_status_get | cofounder domains status get | GET /cofounder-cli/v1/company/domains/status |
domains_registrant_get | cofounder domains registrant get | GET /cofounder-cli/v1/company/domains/registrant |
domains_registrant_update | cofounder domains registrant update --contact-information <json> | PATCH /cofounder-cli/v1/company/domains/registrant |
domains_renewal_quote_get | cofounder domains renewal-quote get --years 1 | POST /cofounder-cli/v1/company/domains/renewal-quote |
domains_renew | cofounder domains renew --expected-price <cents> --years 1 | POST /cofounder-cli/v1/company/domains/renewals |
domains_auto_renew_update | cofounder domains auto-renew update --no-auto-renew | PATCH /cofounder-cli/v1/company/domains/auto-renew |
get shows one domain with its latest registrar state. status get
separates what Cofounder saved from what the registrar and DNS currently
report. registrant update changes only the contact fields you pass; contact
details are never shown back, even by registrant get.
renew charges the price from renewal-quote get, passed as
--expected-price in USD cents; it fails if the price has changed. When
retrying a renewal, pass the same --idempotency-key so you're only charged
once. auto-renew update turns automatic renewal on (--auto-renew) or off.