openapi: 3.0.3 info: description: | Service Enables Bill Payments for GSM Postpaid, Internet payment, Fixed Line customers. # Introduction The API is used by service providers to collect bill amount from the customer (Cash or credit card) and update payment status in Omantel's billing system. # API Functionality This API allows to clients to post the payments for GSM Postpaid, Internet payment, Fixed Line services bill payments, as well as to retrieve information of the customer's status and total dues. The API provides several endpoints/operations: - An endpoint to post the bill payment for GSM POSTPAID, GSM FAX, GSM DATA, FIXEDLINE. - A set of endpoints to retrieve information about a list of bill payments or a specific bill payment, identified by its specific `paymentId`. # Further info and support (FAQs will be added in a later version of the documentation) version: 0.2.0 title: Postpaid Bill Payment Service termsOfService: http://swagger.io/terms/ contact: email: MiddlewareESB@omantel.om license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html externalDocs: description: Product documentation at Omantel.om url: https://api.omantel.om/docs/ servers: - url: https://apigw.omantel.om variables: apiRoot: default: https://apigw.omantel.om description: API root basePath: default: /postpaid-billing description: Base path for the bill payment API tags: - name: Bill Payment description: Operations to manage Bill Payment procedure - name: Bill Payments Inquiry description: Operations to query bills payments - name: Bill and Customer Inquiry description: Operations to obtain information about bill payments paths: /postpaid-billing/v1/payments: post: security: - oAuth2ClientCredentials: [] tags: - Bill Payment summary: Post a Bill Payment Request operationId: postBillPayment description: Post a bill payment for GSM POSTPAID, GSM FAX, GSM DATA, GSM PREPAID, FIXEDLINE account. requestBody: description: Post Bill Pyament transaction required: true content: application/json: schema: $ref: "#/components/schemas/CreateBillPayment" examples: PostpaidMobilePaymentCash: summary: Postpaid Mobile Bill Payment by cash value: | { "paymentTransaction": { "clientCorrelatorId": "123e4567-e89b-12d3-a456-004", "referenceCode": "PAYMENT-REF-004", "customerInfo": { "customerAccountNumber": "10295778", "phoneNumber": "9250xxx" }, "paymentInfo": { "paymentInformation": { "amount": 0.050, "currency": "OMR", "description": "Postpaid bill payment for July 2025" }, "paymentMetaData": { "merchantName": "Omantel", "merchantIdentifier": "OMT-001", "fee": 0.50, "currency": "OMR", "purchaseCategoryCode": "TELCO", "channel": "WEB", "serviceId": "POSTPAID_BILL", "invoiceNumber": "1234567890", "paymentMethod": "cash" } } } } PostpaidMobilePaymentCC: summary: Postpaid Mobile Bill Payment by credit card value: | { "paymentTransaction": { "clientCorrelatorId": "123e4567-e89b-12d3-a456-012", "referenceCode": "PAYMENT-REF-012", "customerInfo": { "customerAccountNumber": "12547854", "phoneNumber": "92506xxx" }, "paymentInfo": { "paymentInformation": { "amount": 25.0, "currency": "OMR", "description": "Postpaid bill payment for July 2025", "isTaxIncluded": false, "isVatIncluded": true, "taxAmount": 0.0, "vatAmount": 0.0 }, "paymentMetaData": { "channel": "WEB", "currency": "OMR", "fee": 0.0, "invoiceNumber": "", "merchantIdentifier": "OMT-001", "merchantName": "Infoline", "purchaseCategoryCode": "TELCO", "serviceId": "POSTPAID_BILL", "paymentMethod": "credit_card", "creditCardDetails": { "authorizationCode": "123455", "cardHolderName": "Dummy Name", "cardNumber": "12334456678889", "cardType": "Visa", "cvv": "123", "expiryMonth": 10, "expiryYear": 2026 } } } } } callbacks: eventNotifications: "{$request.body#/webhook.notificationUrl}/eventNotifications": $ref: "#/paths/~1eventNotifications" responses: 201: description: Created content: application/json: schema: $ref: "#/components/schemas/PaymentCreated" 400: description: Invalid input content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" examples: Generic400: summary: Schema validation failed value: code: INVALID_ARGUMENT status: 400 message: "Schema validation failed at ..." WrongCurrency: summary: Currency is unknown or not authorized value: code: INVALID_ARGUMENT status: 400 message: "Currency is unknown or not authorized: currency" DuplicateClientCorrelator: summary: clientCorrelator still exist value: code: INVALID_ARGUMENT status: 400 message: "clientCorrelator already exist on server" 401: $ref: "#/components/responses/Generic401" 403: description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" examples: Generic403: summary: Forbidden value: status: 403 code: PERMISSION_DENIED message: "Operation not allowed: ..." PhoneNumberRequired: summary: Phone Number not provided and cannot be obtained from Authorization context value: status: 403 code: CARRIER_BILLING.PHONE_NUMBER_REQUIRED message: "Phone Number is required" PhoneNumberMismatch: summary: Phone Number provided not matching Authorization context value: status: 403 code: CARRIER_BILLING.INVALID_TOKEN_CONTEXT message: "Phone Number does not match with Authorization context" UnauthorizedAmount: summary: Unauthorized amount requested value: status: 403 code: CARRIER_BILLING.UNAUTHORIZED_AMOUNT message: "Unauthorized amount requested" UserMobileAccumulatedThresholdAmountOverpassed: summary: Accumulated threshold amount for the user's mobile account overpassed value: status: 403 code: CARRIER_BILLING.USER_AMOUNT_THRESHOLD_OVERPASSED message: "Unathorized payment request. Accumulated user mobile payments overpass account amount threshold" 409: $ref: "#/components/responses/Generic409" 500: $ref: "#/components/responses/Generic500" 503: $ref: "#/components/responses/Generic503" 504: $ref: "#/components/responses/Generic504" get: security: - oAuth2ClientCredentials: [] tags: - Bill Payments Inquiry summary: Get a list of bill payments posted to this service operationId: retrievePayments description: Retrieve a list of payments posted and their details based on some filtering criteria. parameters: - $ref: "#/components/parameters/clientCorrelatorId" - $ref: "#/components/parameters/fromDate" - $ref: "#/components/parameters/toDate" - $ref: "#/components/parameters/Page" - $ref: "#/components/parameters/PerPage" - $ref: "#/components/parameters/Seek" responses: 200: description: OK headers: Content-Last-Key: $ref: "#/components/headers/Content-Last-Key" X-Total-Count: $ref: "#/components/headers/X-Total-Count" content: application/json: schema: $ref: "#/components/schemas/PaymentArray" 400: description: Invalid input content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" examples: OutOfRange: summary: Request out of range value: status: 400 code: OUT_OF_RANGE message: "Client specified an invalid range" 401: $ref: "#/components/responses/Generic401" 403: $ref: "#/components/responses/Generic403" 500: $ref: "#/components/responses/Generic500" 503: $ref: "#/components/responses/Generic503" 504: $ref: "#/components/responses/Generic504" /postpaid-billing/v1/payments/{paymentId}: get: security: - oAuth2ClientCredentials: [] tags: - Bill Payments Inquiry summary: Get bill payment details for a given payment operationId: getCustomer description: Retrieve bill payment details for a given payment. parameters: - name: paymentId in: path description: Payment identifier that was obtained from the post bill payment request required: true schema: type: string responses: 200: description: OK content: application/json: schema: $ref: "#/components/schemas/Payment" 401: $ref: "#/components/responses/Generic401" 403: $ref: "#/components/responses/Generic403" 404: $ref: "#/components/responses/Generic404" 500: $ref: "#/components/responses/Generic500" 503: $ref: "#/components/responses/Generic503" 504: $ref: "#/components/responses/Generic504" /postpaid-billing/v1/customers: get: security: - oAuth2ClientCredentials: [] tags: - Bill and Customer Inquiry summary: Bill and Customer Inquiry Request operationId: getCustomerInfo description: Get customer information and due bill amount. parameters: - $ref: "#/components/parameters/phoneNumber" - $ref: "#/components/parameters/fixedlineNumber" - $ref: "#/components/parameters/internetAccount" - $ref: "#/components/parameters/customerAccountNumber" responses: 201: description: Created content: application/json: schema: $ref: "#/components/schemas/Customer" 400: description: Invalid input content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" examples: Generic400: summary: Schema validation failed value: code: INVALID_ARGUMENT status: 400 message: "Schema validation failed at ..." WrongCurrency: summary: Currency is unknown or not authorized value: code: INVALID_ARGUMENT status: 400 message: "Currency is unknown or not authorized: currency" DuplicateClientCorrelator: summary: clientCorrelator still exist value: code: INVALID_ARGUMENT status: 400 message: "clientCorrelator already exist on server" 401: $ref: "#/components/responses/Generic401" 403: description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" examples: Generic403: summary: Forbidden value: status: 403 code: PERMISSION_DENIED message: "Operation not allowed: ..." PhoneNumberRequired: summary: Phone Number not provided and cannot be obtained from Authorization context value: status: 403 code: CARRIER_BILLING.PHONE_NUMBER_REQUIRED message: "Phone Number is required" PhoneNumberMismatch: summary: Phone Number provided not matching Authorization context value: status: 403 code: CARRIER_BILLING.INVALID_TOKEN_CONTEXT message: "Phone Number does not match with Authorization context" UnauthorizedAmount: summary: Unauthorized amount requested value: status: 403 code: CARRIER_BILLING.UNAUTHORIZED_AMOUNT message: "Unauthorized amount requested" UserMobileAccumulatedThresholdAmountOverpassed: summary: Accumulated threshold amount for the user's mobile account overpassed value: status: 403 code: CARRIER_BILLING.USER_AMOUNT_THRESHOLD_OVERPASSED message: "Unathorized payment request. Accumulated user mobile payments overpass account amount threshold" 409: $ref: "#/components/responses/Generic409" 500: $ref: "#/components/responses/Generic500" 503: $ref: "#/components/responses/Generic503" 504: $ref: "#/components/responses/Generic504" /eventNotifications: post: tags: - Bill Payment Notifications summary: Bill payment notifications operationId: paymentNotification description: | Important: this endpoint is to be exposed by the API client, accepting requests in the defined format. The Omantel will call this endpoint whenever any billing related event occurs. requestBody: description: Creates a new carrier billing payment notification content: application/json: schema: $ref: "#/components/schemas/EventNotification" required: true responses: "204": description: Successful notification "400": $ref: "#/components/responses/Generic400" "401": $ref: "#/components/responses/Generic401" "403": $ref: "#/components/responses/Generic403" "500": $ref: "#/components/responses/Generic500" "503": $ref: "#/components/responses/Generic503" "504": $ref: "#/components/responses/Generic504" components: schemas: CreateBillPayment: type: object required: - paymentTransaction properties: paymentTransaction: $ref: "#/components/schemas/PaymentTransaction" webhook: $ref: "#/components/schemas/Webhook" PaymentCreated: type: object required: - paymentTransaction - paymentId properties: paymentId: type: string description: | Unique Identifier of the payment created in Omantel Billing System. It can be used to query status of the transaction transactionOperationStatus: type: string description: Specifies the payment status (`processing`, `denied`, `reserved`, `succeeded`, `cancelled`). paymentTransaction: $ref: "#/components/schemas/PaymentTransaction" paymentCreationDate: type: string format: date-time description: Date time, in ISO-8601 extended local date format, when the payment is created in server database. This is a technical information. Time-offset from UTC may be used to match local OB time. paymentDate: type: string format: date-time description: Date time, in ISO-8601 extended local date format, when the payment is effectively performed. This is a business information. Time-offset from UTC may be used to match local OB time. webhook: $ref: "#/components/schemas/Webhook" Payment: type: object required: - paymentTransaction - paymentId properties: paymentId: type: string description: Unique Identifier of the payment transactionOperationStatus: type: string description: Specifies the payment status (`processing`, `denied`, `reserved`, `succeeded`, `cancelled`). paymentTransaction: $ref: "#/components/schemas/PaymentTransaction" paymentCreationDate: type: string format: date-time description: Date time, in ISO-8601 extended local date format, when the payment is created in server database. This is a technical information. Time-offset from UTC may be used to match local OB time. paymentDate: type: string format: date-time description: Date time, in ISO-8601 extended local date format, when the payment is effectively performed. This is a business information. Time-offset from UTC may be used to match local OB time. webhook: $ref: "#/components/schemas/Webhook" Webhook: type: object required: - notificationUrl properties: notificationUrl: type: string description: Callback URL to allow asynchronous delivery of payment related events notificationAuthToken: type: string example: "c8974e592c2fa383d4a3960714" description: Authentification token for callback endpoint PaymentTransaction: type: object required: - customerInfo - paymentInfo - referenceCode properties: clientCorrelatorId: type: string description: | Uniquely identifies this post payment request. If there is a communication failure during the payment request, using the same `clientCorrelatorId` when retrying the request allows Omantel to avoid applying the posting twice. This field SHOULD be present to avoid duplicate payment posting. referenceCode: type: string minLength: 1 maxLength: 20 description: Merchant generated payment reference to uniquely identify the request, for instance, in the case of disputes. customerInfo: $ref: "#/components/schemas/CustomerInfo" paymentInfo: $ref: "#/components/schemas/PaymentInfo" CustomerInfo: type: object description: | This must contain `customerAccountNumber`(get by calling `GET /customers Bill and Customer Inquiry Request` API operation) and one of the `phoneNumber`, `fixedlineNumber` or `internetAccount`. Bill Payment is always posted against `customerAccountNumber`. Therefore, `customerAccountNumber` is mandatory and `phoneNumber`, `fixedlineNumber` or `internetAccount` are optional and can be used knowing that customer was entered what information. properties: customerAccountNumber: type: string description: Customer Account Number phoneNumber: type: string description: Phone number must be specified only if bill is paid for POSTPAID phone number example: "92xxxxxx" fixedlineNumber: type: string description: Fixed line number must be specified if bill is paid for Fixed line number example: "24xxxxxx" internetAccount: type: string description: Internet Account must be specified if bill is paid for Internet Account example: "IA123456" required: - customerAccountNumber PaymentInfo: type: object required: - paymentInformation properties: paymentInformation: $ref: "#/components/schemas/PaymentInformation" paymentMetaData: $ref: "#/components/schemas/PaymentMetaData" amountDetails: $ref: "#/components/schemas/AmountDetails" PhoneNumber: type: object properties: phoneNumber: type: string description: Identifies the mobile account to be charged. Phone number in E.164 format (starting with country code). Optionally prefixed with '+'. AmountDetails: type: array description: Detailed description of the concepts/items considered within a specific payment procedure. minItems: 1 items: $ref: "#/components/schemas/PaymentItem" PaymentItem: type: object required: - amount - currency - description properties: amount: type: number format: float description: Specific amount to be charged or reserved referred to a specific item. currency: type: string description: Currency code in which amount is expressed as defined in [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html). description: type: string description: Description text to be used for information and billing text referred to a specific item. isVatIncluded: type: boolean default: false description: If true, the `amount` is VAT included, if false the `amount` is provided without VAT. In both cases, `vatAmount` could be indicated to provide VAT amount. vatAmount: type: number format: float description: | The tax amount charged by the merchant. Indicated when the merchant is the one applying taxes. This field also provides an indicator to the downstream billing system. isTaxIncluded: type: boolean default: false description: If true, the `amount` is tax included, if false the `amount` is provided without tax. In both cases, `taxAmount` could be indicated to provide tax amount. taxAmount: type: number format: float description: | The tax amount charged by the merchant. Indicated when the merchant is the one applying taxes. This field also provides an indicator to the downstream billing system. PaymentInformation: type: object required: - amount - currency - description properties: amount: type: number format: float description: Amount to be charged or reserved. currency: type: string description: Currency code in which amount is expressed as defined in [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html). description: type: string description: Description text to be used for information and billing text isVatIncluded: type: boolean default: false description: If true, the `amount` is VAT included, if false the `amount` is provided without VAT. In both cases, `vatAmount` could be indicated to provide VAT amount. vatAmount: type: number format: float description: | The tax amount charged by the merchant. Indicated when the merchant is the one applying taxes. This field also provides an indicator to the downstream billing system. isTaxIncluded: type: boolean default: false description: If true, the `amount` is tax included, if false the `amount` is provided without tax. In both cases, `taxAmount` could be indicated to provide tax amount. taxAmount: type: number format: float description: | The tax amount charged by the merchant. Indicated when the merchant is the one applying taxes. This field also provides an indicator to the downstream billing system. PaymentMetaData: type: object properties: merchantName: type: string description: Indicates the merchant name. Allows aggregators/partners to specify the actual merchant name merchantIdentifier: type: string description: Indicates the merchant identifier. Allows aggregators/partners to specify the actual merchant identifier fee: type: number format: float description: Percentage of the amount to be received by the requester currency: type: string description: Currency code in which fee is expressed as defined in [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html). purchaseCategoryCode: type: string description: A category defining the type of service, product or media being purchased channel: type: string description: The channel over which the requester is interacting with the merchant (e.g. WAP, Web, SMS...) serviceId: type: string description: The identifier of the partner/merchant service being purchased productId: type: string description: The product identifier to be combined with the `serviceId` to uniquely identify the product being purchased. For example if the `serviceId` relates to a VOD service, the `productId` can specify the movie rented invoiceNumber: type: string description: Invoice Number paymentMethod: $ref: '#/components/schemas/PaymentMethod' creditCardDetails: $ref: '#/components/schemas/CreditCardDetails' PaymentMethod: type: string description: The method used by the customer to pay the bill. enum: - cash - credit_card - debit_card example: credit_card CreditCardDetails: type: object properties: cardNumber: type: string description: | The credit/debit card number. If agreed with Omantel to share dummy card details as card number. example: '1234567890123456' cardHolderName: type: string description: The name of the cardholder. It could be dummy if agreed with Omantel's finance and business teams. example: 'John Doe' cardType: type: string description: The type of the credit/debit card. enum: - Visa - MasterCard - AmericanExpress - Discover example: Visa expiryMonth: type: integer format: int32 description: The expiry month of the card. It could be dummy if agreed with Omantel's finance and business teams. example: 12 expiryYear: type: integer format: int32 description: The expiry year of the card. example: 2023 cvv: type: string description: The CVV of the card. It could be dummy if agreed with Omantel's finance and business teams. example: '123' authorizationCode: type: string description: The authorization code for the transaction. If customer has paid by Card, please specify authorization code . example: '1234' required: - cardNumber - cardHolderName - expiryMonth - expiryYear - authorizationCode ErrorInfo: type: object required: - code - message - status properties: code: type: string description: Code given to this error status: type: string description: HTTP response status code message: type: string description: Detailed error description EventNotification: type: object description: Generic data type for event notification structure required: - event properties: eventSubscriptionid: type: string description: subscription identifier event: $ref: "#/components/schemas/Event" Event: type: object description: Generic data type for event structure required: - eventType - eventTime - eventDetail properties: eventid: type: string format: uuid description: Identifier of the event from the server where the event was reported eventType: type: string description: | Type of event. Different types considered so far: - `PAYMENT_COMPLETED`: Notification indication about payment completion. - `PAYMENT_FAILED`: Notification about payment failure. eventTime: type: string format: date-time description: Date time, in ISO-8601 extended local date format, when the event occurred. Time-offset from UTC may be used to match local OB time. eventDetail: $ref: "#/components/schemas/EventDetail" EventDetail: type: object description: Data type to provide event detail information properties: paymentId: type: string description: Unique Identifier of the payment clientCorrelatorId: type: string description: Client generated Unique Identifier of the payment status: type: string enum: - succeeded - failed description: | Status of the procedure, according to `eventType` param. Possible status are: * `succeeded`: procedure was accomplished * `failed`: procedure failed. description: type: string description: Description of the notification, both used when process was `succeeded` or `failed` indicating in the latter case human understable reason about why process failed. paymentDate: type: string description: Date when the payment is effectively performed, both in 1-step and 2-step scenarios. This is a business information. format: date-time required: - paymentId - status - description PaymentArray: description: A list of payment(s) type: array minItems: 0 items: $ref: "#/components/schemas/Payment" Customer: type: object description: Customer details of the specified input properties: customerName: type: string description: Customer Name customerStatus: type: string description: | Current status of the contract. It could be any one of the following:ACTIVE, PENDING, NEW. example: ACTIVE customerType: type: number description: Customer type. Possible values are 9 - GSM POSTPAID, 11 - GSM FAX, 12 - GSM DATA, 14 - GSM PREPAID, 200/203 – PSTN customerAccountNumber: type: string description: Customer Account Number can be used to pay bils acctCategory: type: string description: Account category of the contract. Example - Business – Large, Business – Medium, Business – Small, Government, Residential, Service, Special Services, Roaming Test Cards, Residential Staff, Test Numbers, Network Support collectionIndicator: type: string description: Indicate whether the contract is in collections or not. ACCOUNT IN COLLECTIONS, ACCOUNT NOT IN COLLECTIONS custAddr1: type: string description: Customer address 1 custAddr2: type: string description: Customer address 2 custAddr3: type: string description: Customer address 3 totalDues: type: number description: Total due amount (in Omani Riyals) associated with the account example: 25.0 responses: Generic400: description: Invalid input content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: code: INVALID_ARGUMENT status: 400 message: "Schema validation failed at ..." Generic401: description: Unauthorized content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: code: UNAUTHORIZED status: 401 message: "Authorization failed: ..." Generic403: description: Forbidden content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: code: FORBIDDEN status: 403 message: "Operation not allowed: ..." Generic404: description: Resource Not Found content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: code: NOT_FOUND status: 404 message: "The specified resource is not found" Generic409: description: Conflict content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: status: 409 code: ALREADY_EXISTS message: "A specified resource duplicate entry found" Generic500: description: Server error content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: code: SERVER_ERROR status: 500 message: "Server Error" Generic503: description: Service unavailable content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: code: SERVICE_UNAVAILABLE status: 503 message: "Service unavailable" Generic504: description: Request timeout exceeded content: application/json: schema: $ref: "#/components/schemas/ErrorInfo" example: code: REQUEST_TIMEOUT_EXCEEDED status: 504 message: "Request timeout exceeded" parameters: phoneNumber: name: phoneNumber in: query description: Phone number of the customer example: "92xxxxxx" schema: type: string fixedlineNumber: name: fixedlineNumber in: query description: Fixed line number of the customer example: "IA123456" schema: type: string internetAccount: name: internetAccount in: query description: Internet Account of the customer example: "24xxxxxx" schema: type: string customerAccountNumber: name: customerAccountNumber in: query description: Account number of the customer example: "12345678" schema: type: string clientCorrelatorId: name: clientCorrelatorId in: query schema: type: string description: | Client call can specify it to find individual transaction by its own unque ID. Service will return matching record only. If `clientCorrelatorId` is specified in the request, then service will consider only `clientCorrelatorId` and return matching transaction only, and will ignore all other parameters. fromDate: name: fromDate in: query description: Results should be taken from this transaction date example: "2023-01-15" schema: type: string format: date toDate: name: toDate in: query description: Results should be taken up-to this transaction date example: "2023-01-31" schema: type: string format: date Page: name: page in: query description: Requested index to indicate the start of the resources to be provided in the response schema: type: integer PerPage: name: perPage in: query description: Requested number of resources to be provided in response schema: type: integer Seek: name: seek in: query description: Index of last result read to create the next/previous number of results. This query parameter is used for pagination in systems with more than 1000 records. `seek` parameter offers finer control than `page` and could be used one or another as an alternative. If both are used in combination (not recommended) `seek` would mark the index starting from the page number specified by `page` and `perPage` [index = (page * perPage) + seek]. schema: type: integer headers: Content-Last-Key: description: Indicates the index of the last result provided in the response schema: type: integer X-Total-Count: description: Total number of items matching criteria schema: type: integer securitySchemes: oAuth2ClientCredentials: type: oauth2 flows: clientCredentials: tokenUrl: https://apigw.omantel.om/oauth2/accesstoken scopes: {}