POST/api/v1/projects
Admin keys only%!(EXTRA string=)Idempotency-KeyMCP tool: create_project
operationId create_project
Create a project
Creates a project with a slug unique among live projects and the given
settings (the rest default), and records project.created. Admin keys
only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
Idempotency-Key |
header | string
1–128 characters · pattern |
A key of the client’s choosing, one per request it means to send once (a UUID will do). A repeat with the same key and the same body within 24 h creates nothing again and gets the first answer, marked Idempotent-Replayed: true. The key belongs to the API key that sent it. Only a 2xx answer is kept: after any other answer the key is free again. |
Request body
application/json · required
- CreateProjectRequest object
-
namestringrequiredWhat people call the project: 1 to 128 characters, trimmed.
example
Acme News -
slugstringrequiredUnique among live projects: 3 to 63 lower-case letters, digits and
-. It never changes.pattern
^[a-z0-9-]{3,63}$· exampleacme-news -
settingsProjectSettingsInputSettings to set; the rest are defaults.
11 fields
- ProjectSettingsInput object
-
auto_footerbooleanAdd an unsubscribe footer when a template has none.
-
brandingBrandingInputBranding of the public pages to set.
4 fields
- BrandingInput object
-
brand_namestring | nullThe name the pages show, 1 to 128 characters.
-
languagestringenorru.example
ru -
support_emailstring · email | nullThe address the pages give for questions.
-
text_overridesmap of string → stringTexts of the pages by key, replacing every override at once: at most 64, keys
[a-z][a-z0-9_]*, texts 1 to 2000 characters.
-
daily_send_quotainteger · int64 | nullMost messages a day, 1 or more;
null: no quota.1–4294967295
-
default_throttle_per_hourinteger · int64 | nullDefault campaign speed, messages an hour;
null: no limit.1–4294967295
-
dns_credentialsDnsCredentialsInputDNS-provider credentials of the project. Write-only: a read never returns them.
1 fields
- DnsCredentialsInput object
-
porkbunPorkbunCredentialsBody | nullPorkbun credentials; set them,
nullclears them, absent keeps them. They override the node’s global[dns.porkbun].2 fields
- PorkbunCredentialsBody object · all fields required
-
api_keystring -
secret_api_keystring
-
from_emailstring · email | nullDefault sender address of campaigns.
example
news@acme.example -
from_namestring | nullDefault sender name of campaigns, 1 to 128 characters, no line breaks.
example
Acme News -
reply_tostring · email | nullDefault
Reply-To. -
soft_bounce_suppress_afterinteger · int64 | nullSoft bounces in a row after which an address is suppressed;
null: off.1–4294967295
-
trackingTrackingInputTracking defaults to set.
2 fields
- TrackingInput object
-
clicksbooleanClick redirects.
-
opensbooleanOpen pixel.
-
transportstring | nullDefault transport:
directorrelay:<name>of a relay the node offers (GET /api/v1/server);null: the node’s default.example
direct
Responses
201
The project
| Header | Type | Description |
|---|---|---|
Idempotent-Replayed | string · enum | true when the answer is a replay of an earlier request with the same Idempotency-Key; absent otherwise. |
Location | string | The project’s URL |
- Project object · all fields required
-
created_atstring · date-time -
deleted_atstring · date-time | nullWhen the project was deleted;
nullwhile it is live. A deleted project can only be read. -
idstring · uuidexample
01900000-0000-7000-8000-000000000001 -
namestringexample
Acme News -
settingsProjectSettingsA project’s settings, every field present.
11 fields
- ProjectSettings object · all fields required
-
auto_footerbooleanAdd an unsubscribe footer when a template has none.
-
brandingBrandingHow the public pages look.
-
daily_send_quotainteger · int32 | nullMost messages a day;
null: no quota.≥ 0
-
default_throttle_per_hourinteger · int32 | nullDefault campaign speed, messages an hour;
null: no limit.≥ 0
-
dns_credentialsDnsCredentialsWhich DNS providers the project set its own credentials for; the credentials are never returned.
1 fields
- DnsCredentials object · all fields required
-
porkbunbooleanWhether the project set its own Porkbun credentials.
-
from_emailstring · email | nullDefault sender address of campaigns.
-
from_namestring | nullDefault sender name of campaigns.
-
reply_tostring · email | nullDefault
Reply-To. -
soft_bounce_suppress_afterinteger · int32 | nullSoft bounces in a row after which an address is suppressed;
null: off.≥ 0
-
trackingTrackingWhat campaigns track by default.
2 fields
- Tracking object · all fields required
-
clicksboolean -
opensboolean
-
transportstring | nullDefault transport,
directorrelay:<name>;null: the node’sdelivery.default_transport.
-
slugstringexample
acme-news -
updated_atstring · date-timeThe latest change: creation, rename, settings, deletion.
409
The slug is taken (conflict); or a request with the same Idempotency-Key has not answered yet (idempotency_key_in_progress)
422
Invalid fields, every one in errors (validation_failed): unknown_field, required, invalid_type, invalid, out_of_range, unknown_relay; or the Idempotency-Key was used in the last 24 h for another request (idempotency_key_reused), or is not 1 to 128 visible ASCII characters (validation_failed, field Idempotency-Key)
429
The key is over its rate limit, api.rate_limit_per_minute requests a minute on this node (rate_limited)
| Header | Type | Description |
|---|---|---|
Retry-After | integer | Seconds until the key’s next request passes; rounded up. |
504
Postwind’s storage did not answer within its time limit (storage_timeout). A change the request makes may still take effect: check before repeating it. A repeat with the same Idempotency-Key never runs it twice: it is 409 idempotency_key_in_progress until the key’s 24 h end