# Container tags

The bundle supports\reuse several Symfony container tags. You may find them useful too.

### Gateway tag

The tag `payum.gateway` could be used if you want to register your service as a gateway gateway. The service must implement `Payum\Core\GatewayInterface`.

```yaml
# app/config/config.yml

services:
    acme.foo_gateway:
        class: Payum\Core\Gateway
        public: true
        tags:
            - { name: payum.gateway, gateway: foo }
```

Attributes:

* factory - define if you want later add actions or extensions to all gateways created by this factory.
* gateway - define if you want later add actions or extensions to this gateway.

### Action tag

The tag `payum.action` could be used if you want to register your service as an action. The service must implement `Payum\Core\Action\ActionInterface`.

```yaml
# app/config/config.yml

services:
    acme.foo_action:
        class: Payum\Core\Action\ActionInterface
        public: true
        tags:
            - { name: payum.action, factory: foo, gateway: bar, all: true, alias: foo, prepend: false }
```

Attributes:

* factory - define if you want to add the action to gateways created by the factory with given name.
* gateway - define if you want to add the action to a gateway with given name
* all - define if you want to add the action to all gateways
* prepend - define if you want your action to be put at the beginning.
* alias - you can use alias if you' like to overwrite the default action or add a good looking name

### Api tag

The tag `payum.api` could be used if you want to register your service as an api. The service could be any object.

```yaml
# app/config/config.yml

services:
    acme.foo_api:
        class: Acme\Payum\FooApi
        public: true
        tags:
            - { name: payum.api, factory: foo, gateway: bar, all: true, alias: foo, prepend: false }
```

Attributes:

* factory - define if you want to add the extension to gateways created by the factory with given name.
* gateway - define if you want to add the extension to a gateway with given name
* all - define if you want to add the extension to all gateways
* prepend - define if you want your extension to be put at the beginning.
* alias - you can use alias if you' like to overwrite the default action or add a good looking name

### Extension tag

The tag `payum.extension` could be used if you want to register your service as an extension. The service must implement `Payum\Core\Extension\ExtensionInterface`.

```yaml
# app/config/config.yml

services:
    acme.foo_extension:
        class: Payum\Core\Extension\ExtensionInterface
        public: true
        tags:
            - { name: payum.extension, factory: foo, gateway: bar, all: true, alias: foo, prepend: false }
```

Attributes:

* factory - define if you want to add the extension to gateways created by the factory with given name.
* gateway - define if you want to add the extension to a gateway with given name
* all - define if you want to add the extension to all gateways
* prepend - define if you want your extension to be put at the beginning.
* alias - you can use alias if you' like to overwrite the default action or add a good looking name

### Gateway factory tag

The tag `payum.gateway_factory` could be used if you want to register your service as a gateway factory. The service must implement `Payum\Core\GatewayFactoryInterface`.

```yaml
# app/config/config.yml

services:
    acme.foo_gateway_factory:
        class: Payum\Core\GatewayFactory
        public: true
        tags:
            - { name: payum.gateway_factory, factory: foo }
```

Attributes:

* name - The name of the factory
* human\_name - The name shown to humans, in the backend for example.

***

### Supporting Payum

Payum is an MIT-licensed open source project with its ongoing development made possible entirely by the support of community and our customers. If you'd like to join them, please consider:

* [Become a sponsor](https://github.com/sponsors/Payum)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://payum.gitbook.io/payum/symfony/container-tags.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
