openapi: 3.0.3 info: title: Global System for Mobile Communications GSMA Camara Project Endpoint Discovery Application Two Step Payment API version: 0.1.0-wip description: The Application Discovery API extends beyond the capabilities of the Simple Edge Discovery API by not only locating the nearest Edge Cloud Zone but also directly linking to the application endpoints within those Edge Cloud Zones. contact: email: sp-edc@lists.camaraproject.org license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html servers: - url: '{apiRoot}/{basePath}' variables: apiRoot: default: https://localhost:443 description: API root. basePath: default: application-endpoint-discovery/vwip description: Base path for the Application Endpoint Discovery. tags: - name: Two Step Payment description: Operations to manage Two Step Payment procedure paths: /payments/prepare: post: security: - openId: - carrier-billing:payments:create tags: - Two Step Payment summary: Global System for Mobile Communications Prepare (reserve) a payment operationId: preparePayment description: Prepare a new payment procedure. Carrier Billing Server will apply the charging according to business configuration for the end user. parameters: - $ref: '#/components/parameters/x-correlator' requestBody: description: Amount transaction content: application/json: schema: $ref: '#/components/schemas/BodyAmountReservationTransactionForReserveInput' required: true callbacks: notifications: '{$request.body#/sink}': post: security: - {} - notificationsBearerAuth: [] tags: - Payment Notifications summary: Carrier Billing payment notifications operationId: preparePaymentNotification description: 'Important: This endpoint is exposed by the API client, accepting requests in the defined format. The Carrier Billing server will call this endpoint whenever any carrier billing related event occurs. ' parameters: - $ref: '#/components/parameters/x-correlator' requestBody: description: Creates a new carrier billing payment notification content: application/cloudevents+json: schema: $ref: '#/components/schemas/CloudEvent' required: true responses: '204': description: Successful notification headers: x-correlator: $ref: '#/components/headers/x-correlator' '400': $ref: '#/components/responses/Generic400' '401': $ref: '#/components/responses/Generic401' '403': $ref: '#/components/responses/Generic403' '410': $ref: '#/components/responses/Generic410' '429': $ref: '#/components/responses/Generic429' '500': $ref: '#/components/responses/Generic500' '503': $ref: '#/components/responses/Generic503' responses: '201': description: Created headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/BodyAmountReservationTransactionForReserve' '400': $ref: '#/components/responses/Payment2StepPrepareInvalid400' '401': $ref: '#/components/responses/Generic401' '403': $ref: '#/components/responses/PaymentPermissionDenied403' '409': description: Conflict headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' example: code: ALREADY_EXISTS status: 409 message: Another session is created for the same UE '422': $ref: '#/components/responses/PaymentUnprocessable422' '500': $ref: '#/components/responses/Generic500' '503': $ref: '#/components/responses/Generic503' '504': $ref: '#/components/responses/Generic504' /payments/{paymentId}/validate: post: security: - openId: - carrier-billing:payments:write tags: - Two Step Payment summary: Global System for Mobile Communications Validate a payment operationId: validatePayment description: Validate a given payment with a code, identified by its paymentId. This process is applicable for 2-STEP, when optionally required by business case. parameters: - name: paymentId in: path description: The payment identifier returned when the payment preparation was created. schema: type: string required: true - $ref: '#/components/parameters/x-correlator' requestBody: description: Payment Validation content: application/json: schema: $ref: '#/components/schemas/ValidatePayment' required: true responses: '204': description: Validation Succeeded headers: x-correlator: $ref: '#/components/headers/x-correlator' '400': $ref: '#/components/responses/ValidatePaymentInvalid400' '401': $ref: '#/components/responses/Generic401' '403': $ref: '#/components/responses/Generic403' '409': description: Conflict headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: Generic409: summary: Conflict value: code: ALREADY_EXISTS status: 409 message: Payment already validated '500': $ref: '#/components/responses/Generic500' '503': $ref: '#/components/responses/Generic503' '504': $ref: '#/components/responses/Generic504' /payments/{paymentId}/confirm: post: security: - openId: - carrier-billing:payments:write tags: - Two Step Payment summary: Global System for Mobile Communications Confirm a payment operationId: confirmPayment description: Confirm a reservation of a given payment, identified by its paymentId. parameters: - name: paymentId in: path description: The payment identifier returned when the payment preparation was created. schema: type: string required: true - $ref: '#/components/parameters/x-correlator' requestBody: description: capture PhoneNumber for payment operation content: application/json: schema: $ref: '#/components/schemas/PhoneNumber' required: true responses: '202': description: Payment confirmation accepted headers: x-correlator: $ref: '#/components/headers/x-correlator' '400': $ref: '#/components/responses/Payment2StepInvalid400' '401': $ref: '#/components/responses/Generic401' '403': $ref: '#/components/responses/PaymentConfirmPermissionDenied403' '404': $ref: '#/components/responses/Generic404' '409': $ref: '#/components/responses/PaymentConfirmConflict409' '422': $ref: '#/components/responses/PaymentSecondStepUnprocessable422' '500': $ref: '#/components/responses/Generic500' '503': $ref: '#/components/responses/Generic503' '504': $ref: '#/components/responses/Generic504' /payments/{paymentId}/cancel: post: security: - openId: - carrier-billing:payments:write tags: - Two Step Payment summary: Global System for Mobile Communications Cancel a payment operationId: cancelPayment description: Cancel a reservation of a given payment, identified by its paymentId. parameters: - name: paymentId in: path description: The payment identifier returned when the payment preparation was created. required: true schema: type: string - $ref: '#/components/parameters/x-correlator' requestBody: description: capture PhoneNumber for payment operation content: application/json: schema: $ref: '#/components/schemas/PhoneNumber' required: true responses: '202': description: Payment Cancellation Accepted headers: x-correlator: $ref: '#/components/headers/x-correlator' '400': $ref: '#/components/responses/Payment2StepInvalid400' '401': $ref: '#/components/responses/Generic401' '403': $ref: '#/components/responses/PaymentCancelPermissionDenied403' '404': $ref: '#/components/responses/Generic404' '409': $ref: '#/components/responses/PaymentCancelConflict409' '422': $ref: '#/components/responses/PaymentSecondStepUnprocessable422' '500': $ref: '#/components/responses/Generic500' '503': $ref: '#/components/responses/Generic503' '504': $ref: '#/components/responses/Generic504' components: responses: Generic503: description: Service unavailable headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_503_UNAVAILABLE: summary: Generic Service Unavailable description: Service is not available. Temporary situation usually related to maintenance process in the server side value: status: 503 code: UNAVAILABLE message: Service Unavailable. PaymentCancelPermissionDenied403: description: "Client does not have sufficient permission.\nIn addition to regular PERMISSION_DENIED scenario other scenarios may exist:\n - Phone Number provided not matching Access Token context (\"code\": \"INVALID_TOKEN_CONTEXT\",\"message\": \"Phone Number is not consistent with access token.\")." headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_403_PERMISSION_DENIED: description: Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security value: status: 403 code: PERMISSION_DENIED message: Client does not have sufficient permissions to perform this action. GENERIC_403_INVALID_TOKEN_CONTEXT: summary: Invalid access token context description: Reflects some inconsistency between information in some field of the API and the related OAuth2 Token value: status: 403 code: INVALID_TOKEN_CONTEXT message: Phone Number is not consistent with access token. Payment2StepInvalid400: description: "Invalid input.\nCommon INVALID_ARGUMENT scenarios usually are:\n - Schema validation failed (\"code\": \"INVALID_ARGUMENT\",\"message\": \"Client specified an invalid argument, request body or query param.\").\n - paymentId is required (\"code\": \"INVALID_ARGUMENT\",\"message\": \"Expected property is missing: paymentId.\")." headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_400_INVALID_ARGUMENT: summary: Generic Invalid Argument description: Invalid Argument. Generic Syntax Exception value: status: 400 code: INVALID_ARGUMENT message: Client specified an invalid argument, request body or query param. GENERIC_400_PAYMENT_ID_REQUIRED: summary: Generic PaymentId required description: paymentId is required value: code: INVALID_ARGUMENT status: 400 message: 'Expected property is missing: paymentId.' Generic500: description: Server error headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_500_INTERNAL: summary: Generic Server Error description: Problem in Server side. Regular Server Exception value: status: 500 code: INTERNAL message: Unknown server error. Typically a server bug. Payment2StepPrepareInvalid400: description: "Invalid input.\nCommon INVALID_ARGUMENT scenarios usually are:\n - Schema validation failed (\"code\": \"INVALID_ARGUMENT\",\"message\": \"Client specified an invalid argument, request body or query param.\").\n - paymentId is required (\"code\": \"INVALID_ARGUMENT\",\"message\": \"Expected property is missing: paymentId.\").\n\nIn addition to regular INVALID_ARGUMENT scenario other scenarios may exist:\n - Invalid sink credential (\"code\": \"INVALID_CREDENTIAL\",\"message\": \"Only Access token is supported\").\n - Invalid sink credential access token (\"code\": \"INVALID_TOKEN\",\"message\": \"Only bearer token is supported\")." headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_400_INVALID_ARGUMENT: summary: Generic Invalid Argument description: Invalid Argument. Generic Syntax Exception value: status: 400 code: INVALID_ARGUMENT message: Client specified an invalid argument, request body or query param. GENERIC_400_PAYMENT_ID_REQUIRED: summary: Generic PaymentId required description: paymentId is required value: code: INVALID_ARGUMENT status: 400 message: 'Expected property is missing: paymentId.' GENERIC_400_INVALID_CREDENTIAL: summary: Generic Invalid Credential description: Invalid sink credential value: status: 400 code: INVALID_CREDENTIAL message: Only Access token is supported GENERIC_400_INVALID_TOKEN: summary: Generic Invalid Token description: Invalid sink credential access token value: status: 400 code: INVALID_TOKEN message: Only bearer token is supported PaymentConfirmConflict409: description: "Conflict. In addition of regular ALREADY_EXISTS scenario other scenarios may exist:\n - paymentId is already confirmed (\"code\": \"CARRIER_BILLING.PAYMENT_CONFIRMED\",\"message\": \"Payment has been confirmed.\").\n - paymentId is already cancelled (\"code\": \"CARRIER_BILLING.PAYMENT_CANCELLED\",\"message\": \"Payment has been cancelled.\")." headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_409_ALREADY_EXISTS: summary: Generic Already Exists description: Trying to create an existing resource value: status: 409 code: ALREADY_EXISTS message: The resource that a client tried to create already exists. GENERIC_409_ALREADY_CONFIRMED: summary: Generic Already Confirmed description: paymentId is already confirmed value: code: CARRIER_BILLING.PAYMENT_CONFIRMED status: 409 message: Payment has been confirmed. GENERIC_409_ALREADY_CANCELLED: summary: Generic Already Cancelled description: paymentId is already cancelled value: code: CARRIER_BILLING.PAYMENT_CANCELLED status: 409 message: Payment has been cancelled. PaymentPermissionDenied403: description: "Client does not have sufficient permission.\nIn addition to regular PERMISSION_DENIED scenario other scenarios may exist:\n - Phone Number provided not matching Access Token context (\"code\": \"INVALID_TOKEN_CONTEXT\",\"message\": \"Phone Number is not consistent with access token.\").\n - Payment denied by business (\"code\": \"CARRIER_BILLING.PAYMENT_DENIED\",\"message\": \"Payment denied by business.\")." headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_403_PERMISSION_DENIED: description: Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security value: status: 403 code: PERMISSION_DENIED message: Client does not have sufficient permissions to perform this action. GENERIC_403_INVALID_TOKEN_CONTEXT: summary: Invalid access token context description: Reflects some inconsistency between information in some field of the API and the related OAuth2 Token value: status: 403 code: INVALID_TOKEN_CONTEXT message: Phone Number is not consistent with access token. GENERIC_403_PAYMENT_DENIED: summary: Generic Payment Denied description: Payment denied by business value: status: 403 code: CARRIER_BILLING.PAYMENT_DENIED message: Payment denied by business. PaymentCancelConflict409: description: "Conflict. In addition of regular ALREADY_EXISTS scenario other scenarios may exist:\n - paymentId is already confirmed (\"code\": \"CARRIER_BILLING.PAYMENT_CONFIRMED\",\"message\": \"Payment has been confirmed.\").\n - paymentId is already cancelled (\"code\": \"CARRIER_BILLING.PAYMENT_CANCELLED\",\"message\": \"Payment has been cancelled.\")." headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_409_ALREADY_EXISTS: summary: Generic Already Exists description: Trying to create an existing resource value: status: 409 code: ALREADY_EXISTS message: The resource that a client tried to create already exists. GENERIC_409_ALREADY_CONFIRMED: summary: Generic Already Confirmed description: paymentId is already confirmed value: code: CARRIER_BILLING.PAYMENT_CONFIRMED status: 409 message: Payment has been confirmed. GENERIC_409_ALREADY_CANCELLED: summary: Generic Already Cancelled description: paymentId is already cancelled value: code: CARRIER_BILLING.PAYMENT_CANCELLED status: 409 message: Payment has been cancelled. PaymentSecondStepUnprocessable422: description: "Client indicates content that is understable by the Server but unable to be processed.\nScenarios that may exist:\n - Phone Number is required (\"code\": \"CARRIER_BILLING.PHONE_NUMBER_REQUIRED\",\"message\": \"Phone Number is required\")." headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_422_PHONE_NUMBER_REQUIRED: summary: Generic Phone Number Required description: Phone Number is required value: status: 422 code: CARRIER_BILLING.PHONE_NUMBER_REQUIRED message: Phone Number is required. Generic410: description: Gone headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_410_GONE: summary: Generic Gone description: Use in notifications flow to allow API Consumer to indicate that its callback is no longer available value: status: 410 code: GONE message: Access to the target resource is no longer available. Generic429: description: Too Many Requests headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_429_TOO_MANY_REQUESTS: summary: Generic Too Many Requests description: API Server request limit is overpassed value: status: 429 code: TOO_MANY_REQUESTS message: Either out of resource quota or reaching rate limiting. Generic400: description: Bad Request headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_400_INVALID_ARGUMENT: summary: Generic Invalid Argument description: Invalid Argument. Generic Syntax Exception value: status: 400 code: INVALID_ARGUMENT message: Client specified an invalid argument, request body or query param. Generic401: description: Unauthorized headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_401_UNAUTHENTICATED: summary: Generic Unauthenticated description: Request cannot be authenticated value: status: 401 code: UNAUTHENTICATED message: Request not authenticated due to missing, invalid, or expired credentials. GENERIC_401_AUTHENTICATION_REQUIRED: summary: Generic Authentication Required description: New authentication is needed, authentication is no longer valid value: status: 401 code: AUTHENTICATION_REQUIRED message: New authentication is required. Generic504: description: Request timeout exceeded headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_504_TIMEOUT: summary: Generic Request Timeout description: API Server Timeout value: status: 504 code: TIMEOUT message: Request timeout exceeded. PaymentUnprocessable422: description: "Client indicates content that is understable by the Server but unable to be processed.\nScenarios that may exist:\n - Phone Number is required (\"code\": \"CARRIER_BILLING.PHONE_NUMBER_REQUIRED\",\"message\": \"Phone Number is required.\").\n - Unauthorized amount requested (\"code\": \"CARRIER_BILLING.UNAUTHORIZED_AMOUNT\",\"message\": \"Unauthorized amount requested.\").\n - Accumulated threshold amount for the user's mobile account overpassed (\"code\": \"CARRIER_BILLING.USER_AMOUNT_THRESHOLD_OVERPASSED\",\"message\": \"Unathorized payment request. Accumulated user mobile payments overpass account amount threshold.\")." headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_422_PHONE_NUMBER_REQUIRED: summary: Generic Phone Number Required description: Phone Number is required value: status: 422 code: CARRIER_BILLING.PHONE_NUMBER_REQUIRED message: Phone Number is required. GENERIC_422_UNAUTHORIZED_AMOUNT: summary: Generic Unauthorized Amount description: Unauthorized amount requested value: status: 422 code: CARRIER_BILLING.UNAUTHORIZED_AMOUNT message: Unauthorized amount requested. GENERIC_422_USER_MOBILE_ACCUMULATED_THRESHOLD_AMOUNT_OVERPASSED: summary: Generic User Mobile Accumulated threshold Amount Overpassed description: Accumulated threshold amount for the user's mobile account overpassed value: status: 422 code: CARRIER_BILLING.USER_AMOUNT_THRESHOLD_OVERPASSED message: Unathorized payment request. Accumulated user mobile payments overpass account amount threshold. PaymentConfirmPermissionDenied403: description: "Client does not have sufficient permission.\nIn addition to regular PERMISSION_DENIED scenario other scenarios may exist:\n - Phone Number provided not matching Access Token context (\"code\": \"INVALID_TOKEN_CONTEXT\",\"message\": \"Phone Number is not consistent with access token.\").\n - Payment denied by business (\"code\": \"CARRIER_BILLING.PAYMENT_DENIED\",\"message\": \"Payment denied by business.\")." headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_403_PERMISSION_DENIED: description: Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security value: status: 403 code: PERMISSION_DENIED message: Client does not have sufficient permissions to perform this action. GENERIC_403_INVALID_TOKEN_CONTEXT: summary: Invalid access token context description: Reflects some inconsistency between information in some field of the API and the related OAuth2 Token value: status: 403 code: INVALID_TOKEN_CONTEXT message: Phone Number is not consistent with access token. GENERIC_403_PAYMENT_DENIED: summary: Generic Payment Denied description: Payment denied by business value: status: 403 code: CARRIER_BILLING.PAYMENT_DENIED message: Payment denied by business. Generic403: description: Forbidden headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_403_PERMISSION_DENIED: description: Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security value: status: 403 code: PERMISSION_DENIED message: Client does not have sufficient permissions to perform this action. Generic404: description: Resource Not Found headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_404_NOT_FOUND: summary: Generic Not Found description: Resource is not found value: status: 404 code: NOT_FOUND message: The specified resource is not found. ValidatePaymentInvalid400: description: "Invalid input.\nIn addition to regular INVALID_ARGUMENT scenario other scenarios may exist:\n - authorizationId is not valid (\"code\": \"CARRIER_BILLING.INVALID_AUTHORIZATION_ID\",\"message\": \"Invalid authorizationId.\").\n - code is not valid (\"code\": \"CARRIER_BILLING.INVALID_CODE\",\"message\": \"Invalid code.\").\n - validation failed (\"code\": \"CARRIER_BILLING.VALIDATION_FAILED\",\"message\": \"the maximum number of attempts have been consumed for this validation.\")." headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_400_INVALID_ARGUMENT: summary: Generic Invalid Argument description: Invalid Argument. Generic Syntax Exception value: status: 400 code: INVALID_ARGUMENT message: Client specified an invalid argument, request body or query param. GENERIC_400_AUTHORIZATION_ID_REQUIRED: summary: Generic AuthorizationId Required description: authorizationId is required value: code: INVALID_ARGUMENT status: 400 message: 'Expected property is missing: authorizationId.' GENERIC_400_CODE_REQUIRED: summary: Generic Code Required description: code is required value: code: INVALID_ARGUMENT status: 400 message: 'Expected property is missing: code.' GENERIC_400_INVALID_AUTHORIZATION_ID: summary: Generic Invalid Authorization Id description: authorizationId is not valid value: code: CARRIER_BILLING.INVALID_AUTHORIZATION_ID status: 400 message: Invalid authorizationId. GENERIC_400_INVALID_CODE: summary: Generic Invalid Code description: code is not valid value: code: CARRIER_BILLING.INVALID_CODE status: 400 message: Invalid code. GENERIC_400_VALIDATION_FAILED: summary: Generic Validation Failed description: validation failed value: code: CARRIER_BILLING.VALIDATION_FAILED status: 400 message: the maximum number of attempts have been consumed for this validation. schemas: PaymentAmountForReserve: type: object required: - chargingInformation properties: chargingInformation: $ref: '#/components/schemas/ChargingInformation' chargingMetaData: $ref: '#/components/schemas/ChargingMetaData' paymentDetails: $ref: '#/components/schemas/PaymentDetails' BodyAmountReservationTransactionForReserve: required: - amountTransaction - paymentId - paymentStatus - paymentCreationDate type: object properties: paymentId: type: string description: Unique Identifier of the payment example: AK234rfweSBuWGFUEWFGWEVWRV amountTransaction: $ref: '#/components/schemas/AmountReservationTransactionForReserve' paymentStatus: type: string description: Specifies the payment status (`processing`, `pending_validation`, `denied`, `reserved`, `succeeded`, `cancelled`). example: processing paymentCreationDate: type: string format: date-time description: Date time when the payment is created in server database. This is a technical information. It must follow RFC 3339 and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z). validationInfo: allOf: - $ref: '#/components/schemas/ValidationInfo' - description: Information to perform otp validation. Only needed when business case requires it. Sending of OTP is outside the scope of this specification. sink: type: string format: url description: The address to which events shall be delivered, using the HTTP protocol. example: https://endpoint.example.com/sink sinkCredential: allOf: - description: A sink credential provides authentication or authorization information necessary to enable delivery of events to a target. - $ref: '#/components/schemas/SinkCredential' CloudEvent: description: The notification format required: - id - source - specversion - type - time properties: id: type: string description: Identifier of this event, that must be unique in the source context. minLength: 1 example: sd5e-uy52-88t4-za66 source: $ref: '#/components/schemas/Source' type: type: string description: Type of event as defined in each CAMARA API minLength: 25 example: org.camaraproject.carrier-billing.v0.payment-reserved specversion: type: string description: Version of the specification to which this event conforms (must be 1.0 if it conforms to cloudevents 1.0.2 version) minLength: 3 example: '1.0' datacontenttype: type: string description: media-type that describes the event payload encoding, must be "application/json" for CAMARA APIs example: application/json data: type: object description: Event details payload described in each CAMARA API and referenced by its type time: $ref: '#/components/schemas/DateTime' discriminator: propertyName: type mapping: org.camaraproject.carrier-billing.v0.payment-pending-validation: '#/components/schemas/EventPaymentPendingValidation' org.camaraproject.carrier-billing.v0.payment-reserved: '#/components/schemas/EventPaymentReserved' org.camaraproject.carrier-billing.v0.payment-completed: '#/components/schemas/EventPaymentCompleted' org.camaraproject.carrier-billing.v0.payment-cancelled: '#/components/schemas/EventPaymentCancelled' org.camaraproject.carrier-billing.v0.payment-denied: '#/components/schemas/EventPaymentDenied' AmountReservationTransactionForReserve: required: - phoneNumber - paymentAmount - referenceCode type: object properties: phoneNumber: type: string description: 'Identifies the mobile account to be charged. A public identifier addressing a telephone subscription. In mobile networks it corresponds to the MSISDN (Mobile Station International Subscriber Directory Number). In order to be globally unique it has to be formatted in international format, according to E.164 standard, prefixed with ''+''.' pattern: ^\+[1-9][0-9]{4,14}$ example: '+34671999000' clientCorrelator: type: string description: Uniquely identifies this payment request. If there is a communication failure during the payment request, using the same clientCorrelator when retrying the request allows the operator to avoid applying the same charge twice. This field SHOULD be present. Same value as indicated in the request. example: req-12f2pgh448gh2hvrfrv paymentAmount: $ref: '#/components/schemas/PaymentAmountForReserve' referenceCode: type: string description: Merchant generated payment reference to uniquely identify the request, for example, in the case of disputes. Same value as the one provided in the request. example: ref-pay-834tfr2rA3v8r8vr3rv resourceURL: type: string description: URI of the created resource (same as in the Location header) example: urn:payments:AK234rfweSBuWGFUEWFGWEVWRV serverReferenceCode: type: string description: Reference to the charge or refund, provided by the server, and meaningful to the server’s backend system for the purpose of reconciliation. example: ref-pay-834tfr2rA3v8r8vr3rv-serv ChargingInformation: type: object required: - amount - currency - description properties: amount: type: number format: float multipleOf: 0.001 minimum: 0.001 description: Amount to be charged or reserved. example: 100 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). example: EUR description: type: string description: Description text to be used for information and billing text example: FIFA EA Sports 24 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 multipleOf: 0.001 minimum: 0 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. ' example: 21 AmountReservationTransactionForReserveInput: type: object required: - paymentAmount - referenceCode properties: phoneNumber: type: string description: 'Identifies the mobile account to be charged. A public identifier addressing a telephone subscription. In mobile networks it corresponds to the MSISDN (Mobile Station International Subscriber Directory Number). In order to be globally unique it has to be formatted in international format, according to E.164 standard, prefixed with ''+''. Additional Considerations: - When phoneNumber is not indicated, it can be inferred from authorization context (i.e. token), otherwise `HTTP 403` will be answered. - When phoneNumber is indicated, authorization context will be consistent, otherwise `HTTP 403` will be answered.' pattern: ^\+[1-9][0-9]{4,14}$ example: '+34671999000' clientCorrelator: type: string description: Uniquely identifies this create payment request. If there is a communication failure during the payment request, using the same clientCorrelator when retrying the request allows the operator to avoid applying the same charge twice. This field SHOULD be present. example: req-12f2pgh448gh2hvrfrv paymentAmount: $ref: '#/components/schemas/PaymentAmountForReserve' referenceCode: type: string description: Merchant generated payment reference to uniquely identify the request, for instance, in the case of disputes. example: ref-pay-834tfr2rA3v8r8vr3rv ChargingMetaData: type: object properties: merchantName: type: string description: Indicates the merchant name. Allows aggregators/partners to specify the actual merchant name example: EA Sports merchantIdentifier: type: string description: Indicates the merchant identifier. Allows aggregators/partners to specify the actual merchant identifier example: eas-12345 fee: type: number format: float multipleOf: 0.01 description: Percentage of the amount to be received by the requester example: 10 purchaseCategoryCode: type: string description: A category defining the type of service, product or media being purchased example: games channel: type: string description: The channel over which the requester is interacting with the merchant (e.g. WAP, Web, SMS...) example: web serviceId: type: string description: The identifier of the partner/merchant service being purchased example: games-online 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 example: '138235321' PhoneNumber: type: object properties: phoneNumber: type: string description: 'Identifies the mobile account to be charged. A public identifier addressing a telephone subscription. In mobile networks it corresponds to the MSISDN (Mobile Station International Subscriber Directory Number). In order to be globally unique it has to be formatted in international format, according to E.164 standard, prefixed with ''+''. Additional Considerations: - When phoneNumber is not indicated, it can be inferred from authorization context (i.e. token), otherwise `HTTP 403` will be answered. - When phoneNumber is indicated, authorization context will be consistent, otherwise `HTTP 403` will be answered.' pattern: ^\+[1-9][0-9]{4,14}$ example: '+34671999000' ValidationInfo: type: object required: - action properties: action: type: string enum: - open - validate description: Action to be done regarding otp validation. discriminator: propertyName: action mapping: open: '#/components/schemas/Open' validate: '#/components/schemas/Validate' example: action: validate authorizationId: Fn34o8g239v3wrb3t Source: type: string format: uri-reference minLength: 1 description: "Identifies the context in which an event happened - be a non-empty `URI-reference` like:\n- URI with a DNS authority:\n * https://github.com/cloudevents\n * mailto:cncf-wg-serverless@lists.cncf.io\n- Universally-unique URN with a UUID:\n * urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66\n- Application-specific identifier:\n * /cloudevents/spec/pull/123\n * 1-555-123-4567" example: https://notificationSendServer12.supertelco.com ErrorInfo: type: object required: - code - message - status properties: code: type: string description: Code given to this error status: type: integer description: HTTP response status code message: type: string description: Detailed error description SinkCredential: type: object properties: credentialType: type: string enum: - PLAIN - ACCESSTOKEN - REFRESHTOKEN description: The type of the credential. Only `ACCESSTOKEN` is supported so far. discriminator: propertyName: credentialType mapping: PLAIN: '#/components/schemas/PlainCredential' ACCESSTOKEN: '#/components/schemas/AccessTokenCredential' REFRESHTOKEN: '#/components/schemas/RefreshTokenCredential' required: - credentialType ValidatePayment: type: object required: - authorizationId - code properties: authorizationId: type: string description: Unique authorization identifier for a specific payment. example: Fn34o8g239v3wrb3t code: type: string description: Code received via SMS to validate and authorize a specific payment, only needed when business case requires it. Sending of this code is outside this specification. example: '352673' DateTime: type: string format: date-time description: Timestamp when the occurrence happened. Must adhere to RFC 3339. example: '2023-11-03T12:27:10Z' PaymentItem: type: object required: - id - amount - currency - description properties: id: type: string description: Unique payment item identifier. Relevant to uniquely identify an item within a given payment when `paymentDetails` are provided and also to correlate information when a refund regarding this item is performed, by means of using `refundDetails`. example: 3goug3uvu32v3b amount: type: number format: float multipleOf: 0.001 minimum: 0.001 description: Specific amount to be charged or reserved referred to a specific item. example: 100 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). example: EUR description: type: string description: Description text to be used for information and billing text referred to a specific item. example: FIFA EA Sports 24 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 multipleOf: 0.001 minimum: 0 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. ' example: 21 PaymentDetails: type: array description: Detailed description of the concepts/items considered within a specific payment procedure. minItems: 1 items: $ref: '#/components/schemas/PaymentItem' BodyAmountReservationTransactionForReserveInput: required: - amountTransaction type: object properties: amountTransaction: $ref: '#/components/schemas/AmountReservationTransactionForReserveInput' sink: type: string format: url description: The address to which events shall be delivered, using the HTTP protocol. example: https://endpoint.example.com/sink sinkCredential: allOf: - description: A sink credential provides authentication or authorization information necessary to enable delivery of events to a target. - $ref: '#/components/schemas/SinkCredential' parameters: x-correlator: name: x-correlator in: header description: Correlation id for the different services schema: type: string headers: x-correlator: description: Correlation id for the different services schema: type: string securitySchemes: openId: description: OpenID Provider Configuration Information. type: openIdConnect openIdConnectUrl: .well-known/openid-configuration externalDocs: description: Product documentation at CAMARA. url: https://github.com/camaraproject/EdgeCloud