# Method: projects.topics.create

- [HTTP request](https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/create#body.HTTP_TEMPLATE)
- [Path parameters](https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/create#body.PATH_PARAMETERS)
- [Request body](https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/create#body.request_body)
  - [JSON representation](https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/create#body.request_body.SCHEMA_REPRESENTATION)
- [Response body](https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/create#body.response_body)
- [Authorization scopes](https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/create#body.aspect)
- [Try it!](https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/create#try-it)

Creates the given topic with the given name. See the [resource name rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).

### HTTP request

Choose a location:
<button value="global" default="">global</button>   
`PUT https://pubsub.googleapis.com/v1/{name}`

<br />

### Path parameters

| Parameters ||
|---|---|
| `name` | `string` Required. Identifier. Name of the topic. Format is `projects/{project}/topics/{topic}`. |

### Request body

The request body contains data with the following structure:

| JSON representation |
|---|
| ``` { "labels": { string: string, ... }, "messageStoragePolicy": { object (`https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#MessageStoragePolicy`) }, "kmsKeyName": string, "schemaSettings": { object (`https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#SchemaSettings`) }, "satisfiesPzs": boolean, "messageRetentionDuration": string, "state": enum (`https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#State`), "ingestionDataSourceSettings": { object (`https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#IngestionDataSourceSettings`) }, "messageTransforms": [ { object (`https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/MessageTransform`) } ], "tags": { string: string, ... } } ``` |

| Fields ||
|---|---|
| `labels` | `map (key: string, value: string)` Optional. See [Creating and managing labels](https://cloud.google.com/pubsub/docs/labels). An object containing a list of `"key": value` pairs. Example: `{ "name": "wrench", "mass": "1.3kg", "count": "3" }`. |
| `messageStoragePolicy` | ``object (`https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#MessageStoragePolicy`)`` Optional. Policy constraining the set of Google Cloud Platform regions where messages published to the topic may be stored. If not present, then no constraints are in effect. |
| `kmsKeyName` | `string` Optional. The resource name of the Cloud KMS CryptoKey to be used to protect access to messages published on this topic. The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`. |
| `schemaSettings` | ``object (`https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#SchemaSettings`)`` Optional. Settings for validating messages published against a schema. |
| `satisfiesPzs` | `boolean` Optional. Reserved for future use. This field is set only in responses from the server; it is ignored if it is set in any requests. |
| `messageRetentionDuration` | ``string (`https://protobuf.dev/reference/protobuf/google.protobuf#duration` format)`` Optional. Indicates the minimum duration to retain a message after it is published to the topic. If this field is set, messages published to the topic in the last `messageRetentionDuration` are always available to subscribers. For instance, it allows any attached subscription to [seek to a timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time) that is up to `messageRetentionDuration` in the past. If this field is not set, message retention is controlled by settings on individual subscriptions. Cannot be more than 31 days or less than 10 minutes. A duration in seconds with up to nine fractional digits, ending with '`s`'. Example: `"3.5s"`. |
| `state` | ``enum (`https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#State`)`` Output only. An output-only field indicating the state of the topic. |
| `ingestionDataSourceSettings` | ``object (`https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#IngestionDataSourceSettings`)`` Optional. Settings for ingestion from a data source into this topic. |
| `messageTransforms[]` | ``object (`https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/MessageTransform`)`` Optional. Transforms to be applied to messages published to the topic. Transforms are applied in the order specified. |
| `tags` | `map (key: string, value: string)` Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See <https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags> for more information on using tags with Pub/Sub resources. An object containing a list of `"key": value` pairs. Example: `{ "name": "wrench", "mass": "1.3kg", "count": "3" }`. |

### Response body

If successful, the response body contains a newly created instance of `https://docs.cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#Topic`.

### Authorization scopes

Requires one of the following OAuth scopes:

- `https://www.googleapis.com/auth/pubsub`
- `https://www.googleapis.com/auth/cloud-platform`

For more information, see the [Authentication Overview](https://docs.cloud.google.com/docs/authentication#authorization-gcp).