From fdd125638cd0297ae587fbe3b3b73807b9a8bbe7 Mon Sep 17 00:00:00 2001 From: mtnieto Date: Fri, 30 Aug 2024 14:22:44 +0200 Subject: [PATCH 1/9] updated links --- 01_introduction/01_whatis.md | 8 ++++---- 01_introduction/02_architecture.md | 2 ++ 02_apis/02_simswap/01_simswap.md | 16 ---------------- .../01_numberverification.md | 18 ------------------ 4 files changed, 6 insertions(+), 38 deletions(-) diff --git a/01_introduction/01_whatis.md b/01_introduction/01_whatis.md index bdde08b..5a27840 100644 --- a/01_introduction/01_whatis.md +++ b/01_introduction/01_whatis.md @@ -6,7 +6,7 @@ category: 66840b9dac745a002559ffad ## What is Open Gateway? -Open Gateway is a initiative spearheaded by the GSMA in collaboration with leading telecommunications operators, cloud providers, and aggregators worldwide. Our mission is to create a standardized framework of Application Programming Interfaces (APIs) that enable simplified and universal access to cutting-edge mobile network capabilities and associated services. By leveraging Open Gateway APIs, developers can focus on building exceptional applications while we handle the complexities of network integration. +Open Gateway is a initiative spearheaded by the [GSMA](https://www.gsma.com/solutions-and-impact/gsma-open-gateway/) in collaboration with leading telecommunications operators, cloud providers, and aggregators worldwide. Our mission is to create a standardized framework of Application Programming Interfaces (APIs) that enable simplified and universal access to cutting-edge mobile network capabilities and associated services. By leveraging Open Gateway APIs, developers can focus on building exceptional applications while we handle the complexities of network integration. ## Why Open Gateway APIs? @@ -40,7 +40,7 @@ We understand that integrating new technologies can be challenging. That's why O Getting started with Open Gateway APIs is easy: 1. **Explore Available APIs:** Browse our API catalog to discover the various network capabilities and services that you can integrate into your applications. -2. **Find a channel partner:** Identify a channel partner or join to the Developer Hub in order to use the APIs. +2. **Find a channel partner or use our Sandbox:** Identify a channel partner or join to the [Developer Hub](https://opengateway.telefonica.com/developer-hub) in order to use the APIs. 3. **Register and Obtain Credentials:** Sign up for an account and obtain the necessary API credentials to access the services. 4. **Read the Documentation:** Familiarize yourself with our comprehensive documentation to understand how to make API calls, handle responses, and implement best practices. 5. **Start Building:** Begin integrating Open Gateway APIs into your applications, leveraging the powerful network capabilities to create innovative and high-performance solutions. @@ -48,9 +48,9 @@ Getting started with Open Gateway APIs is easy: ## Join the Open Gateway Community -By becoming a part of the Open Gateway community, you join a global network of developers, innovators, and industry leaders dedicated to advancing the digital ecosystem. Share your experiences, collaborate with peers, and stay updated with the latest developments and best practices. - Open Gateway APIs open up a world of possibilities for developers looking to harness the power of advanced network capabilities. Our standardized, secure, and easy-to-use APIs provide the foundation for creating exceptional applications that meet the demands of today's connected world. Start your journey with Open Gateway today and transform your ideas into reality. +By becoming a part of the Open Gateway community, you join a global network of developers, innovators, and industry leaders dedicated to advancing the digital ecosystem. Please, join to our [Developer Hub](https://opengateway.telefonica.com/developer-hub) for exclusive content and to use the Sandbox to test the Open Gateway APIs. + Welcome to the future of network integration. Welcome to Open Gateway APIs. diff --git a/01_introduction/02_architecture.md b/01_introduction/02_architecture.md index 2e0392d..c3a53c6 100644 --- a/01_introduction/02_architecture.md +++ b/01_introduction/02_architecture.md @@ -44,3 +44,5 @@ The Open Gateway architecture offers **Unified API Access**, allowing developers To interact with the Open Gateway APIs, developers will interface with them through an **aggregator** or a **channel partner**. Aggregators serve as intermediaries that consolidate APIs from multiple telecommunications operators into a unified platform. This documentation outlines how developers can leverage aggregators to access and integrate Open Gateway APIs seamlessly. An **aggregator** in telecommunications and APIs refers to a pivotal entity that consolidates services and functionalities from multiple providers into a unified platform or interface. This consolidation simplifies access to diverse offerings for end-users, developers, or businesses, enhancing efficiency and fostering innovation within the digital ecosystem. + +You can also test our Open Gateway APIs by joining to our [Developer Hub](https://opengateway.telefonica.com/developer-hub) and using the Sandbox. diff --git a/02_apis/02_simswap/01_simswap.md b/02_apis/02_simswap/01_simswap.md index eaa695e..5ceb80e 100644 --- a/02_apis/02_simswap/01_simswap.md +++ b/02_apis/02_simswap/01_simswap.md @@ -49,20 +49,4 @@ With the SIM Swap CAMARA API, any digital service provider can integrate the fun Aggregators play a crucial role in the anti-fraud industry. They can integrate this functionality into their software and build more sophisticated algorithms by combining other security checks, such as location verification, phone number verification, matching of contact information, external data sources, AI algorithms, etc. To achieve this, aggregators can use other Open Gateway APIs like Device Location Verification, Number Verification, or KYC-Match. -## Advantages and Benefits of Using SIM Swap CAMARA API - -The CAMARA SIM Swap API offers numerous advantages and benefits for the industry focused on enforcing identity protection. Here are some key arguments highlighting the advantages of using the CAMARA API: - -1. **Two-Factor Authentication Reinforcement:** The SIM Swap API enhances the security of procedures involving two-factor authentication based on SMS. Verifying whether the mobile device used in the second factor has been compromised by a SIM swap protects your customer’s account and your business. - -2. **Secure Account Creation:** The SIM Swap API allows for the detection of potentially fraudulent actions before creating new user accounts. This prevents unauthorized modifications of personal information, such as addresses or initiating password resets. This feature is crucial in sectors like banking transactions, e-commerce, and in-app purchases. - -3. **Anti-Fraud Suite:** The SIM Swap API is part of a suite of Open Gateway APIs designed to protect customer identities in mobile digital services. Other APIs, such as Number Verification, Device Location Verification, and Know Your Customer - Match, can be used to enhance this protection in various scenarios. - -4. **Usability:** The CAMARA API is developer-friendly, easy to set up, and use. It simplifies the integration process for telcos and clients of all kinds, allowing them to offer SIM Swap as an option to check SIM renewals. - -5. **Footprint:** The standardization of SIM Swap through CAMARA guarantees common access to functionality across telco operators and countries. - -6. **Security:** CAMARA guidelines ensure a common privacy and security framework that addresses the needs of service providers while preserving the rights of customers. - By using the SIM Swap CAMARA API, developers can significantly enhance the security and reliability of their applications, providing a robust defense against SIM swap fraud. diff --git a/02_apis/03_numberverification/01_numberverification.md b/02_apis/03_numberverification/01_numberverification.md index 268422f..d72dfb0 100644 --- a/02_apis/03_numberverification/01_numberverification.md +++ b/02_apis/03_numberverification/01_numberverification.md @@ -30,21 +30,3 @@ The Number Verification CAMARA API enables developers to seamlessly integrate au Integration with channel partners and service aggregators streamlines the incorporation of telco functionalities with additional security algorithms, backup authentication methods, or external data sources. This collaboration enhances service reliability and security, leveraging APIs like Device Location Verification or SIM SWAP within the Open Gateway framework. - -## Advantages of the CAMARA Number Verification API - -The CAMARA Number Verification API offers significant advantages for industries focused on enhancing identity protection. Here are key benefits that highlight why the CAMARA API is essential: - -1. **Secure Authentication and Identity Validation:** Utilizes network mechanisms instead of less secure Over the Top (OTT) methods or hardware tokens. It operates on any internet-enabled mobile device connected to a carrier's mobile data network, including during roaming and temporary Wi-Fi transitions. - -2. **Improved User Experience:** Eliminates the need to copy, paste, or remember one-time passwords sent via SMS, thereby enhancing both security and user convenience during validation processes. - -3. **Anti-Fraud Suite:** Number Verification is part of the broader suite of Open Gateway APIs dedicated to protecting customer identities in mobile digital services. APIs like SIM SWAP, Device Location Verification, and Know Your Customer - Match complement Number Verification to strengthen security across different scenarios. - -4. **Usability:** CAMARA APIs are designed with developer-friendliness in mind, simplifying integration for telcos and various clients. This streamlined integration enables service providers to offer Number Verification seamlessly as an authentication option for users. - -5. **Footprint:** CAMARA's standardized approach to Number Verification ensures universal access to this functionality across telco operators and countries, promoting consistency and reliability. - -6. **Security:** CAMARA guidelines establish a common privacy and security framework that addresses service providers' needs while safeguarding customer rights. - - From 05b2d671c1e08e457608d4cdecaf01e658a466af Mon Sep 17 00:00:00 2001 From: mtnieto Date: Tue, 3 Sep 2024 09:47:31 +0200 Subject: [PATCH 2/9] updated getting started --- 04_gettingstarted/01_gettingstarted.md | 5 +- .../02_sandbox/01_introsandbox.md | 32 +++++ .../02_sandbox/02_usethesandbox.md | 117 ++++++++++++++++++ .../02_sandbox/03_sdkreference.md | 7 ++ 4 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 04_gettingstarted/02_sandbox/01_introsandbox.md create mode 100644 04_gettingstarted/02_sandbox/02_usethesandbox.md create mode 100644 04_gettingstarted/02_sandbox/03_sdkreference.md diff --git a/04_gettingstarted/01_gettingstarted.md b/04_gettingstarted/01_gettingstarted.md index be3ce13..6dfcb3d 100644 --- a/04_gettingstarted/01_gettingstarted.md +++ b/04_gettingstarted/01_gettingstarted.md @@ -8,7 +8,10 @@ Once you are familiar with the Open Gateway initiative and the APIs we offer, yo There is two paths you can take according to the maturity of your project, not exclusive if you want to go through both, which are either testing in the Telefónica's Open Gateway Sandbox environment or shifting to the Open Gateway platform of one of our Channel Partners, closer to a commercial stage. -## Telefónica Open Gateway Sandbox +## Telefónica Gateway Developer Hub + + +The Open Gateway Developer Hub is your ultimate resource for building and integrating applications with eas using the Sandbox. Access to exclusive content like videos or webinars. Join a thriving community of developers, get support, and explore new features with the Open Gateway Developer Hub—the essential platform for all your development needs. The Open Gateway Sandbox from Telefónica is a free environment where you can test the Open Gateway APIs. It is a great way to start testing the APIs and services in a controlled environment, without the need to sign a contract or pay for the service. diff --git a/04_gettingstarted/02_sandbox/01_introsandbox.md b/04_gettingstarted/02_sandbox/01_introsandbox.md new file mode 100644 index 0000000..736010c --- /dev/null +++ b/04_gettingstarted/02_sandbox/01_introsandbox.md @@ -0,0 +1,32 @@ +--- +title: Sandbox +excerpt: In this section you will know what is the Telefónica Open Gateway Sandbox environment to test the Open Gateway APIs without the need to subscribe to a Channel Partner. Your tests won't be charged and won't be suitable for going into a production stage, so it is a great chance to learn and prototype, as a previous step to go commercial. +category: 66840b9dac745a002559ffad +--- + + +The Sandbox in Open Gateway is a secure and free testing environment that allows developers to experiment with Open Gateway APIs without any risk to live systems. This isolated space is designed to help developers validate their applications, ensuring they work as intended before deployment. By providing access to all the necessary tools and resources, the Sandbox allows developers to simulate real-world scenarios and thoroughly test API integrations. + +One of the key advantages of the Open Gateway Sandbox is its ability to offer a risk-free environment where developers can troubleshoot issues, refine their code, and optimize performance without impacting actual data or services. This ensures that any potential bugs or errors are identified and resolved early in the development process, leading to more reliable and secure applications when they go live. + +Additionally, the free access to the Sandbox makes it an invaluable resource for developers, especially those working on tight budgets or within smaller teams. It provides all the benefits of a robust testing environment without the associated costs, allowing developers to focus on creating high-quality applications. By using the Sandbox, developers can ensure that their solutions are fully functional, secure, and optimized, paving the way for a smoother and more successful deployment. +Please note that the usage of credentials granted from our Sandbox might be subject to some limitations in order to let you test without the obligations of a commercial contract. The terms and conditions of our developer or partner programs will apply. + +## Getting onboarded + +The only requirement to start using the Open Gateway Sandbox is to join one of our programs. Please check which one best fit your needs. You can also request to join both: + +- [Open Gateway Developer Hub](https://opengateway.telefonica.com/en/developer-hub) +- [Open Gateway Partner Program](https://opengateway.telefonica.com/en/partner-program) + +Once you are approved in at least one of our programs and you log in to the private area of the Telefónica Open Gateway website, you already have access to the Sandbox web console as a program member from the Technical Toolbox section. + +![Access to the Sandbox console from the website private area](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/access.png?raw=true) + +## How to use the Sandbox + +Discover how to utilize the Open Gateway Sandbox, a no-cost, secure space for testing and perfecting your applications with realistic API scenarios prior to going live. [Our detailed guide](02_usethesandbox.md) will help you optimize your development workflow and ensure a seamless deployment. + +## SDK reference + +You can check the reference of the current Sandbox SDK reference in the [Python Sandbox SDK](03_sdkreference.md) guide. The scope of the APIs covered and the programming languages supported will be extended progressively according to the Sandbox roadmap. diff --git a/04_gettingstarted/02_sandbox/02_usethesandbox.md b/04_gettingstarted/02_sandbox/02_usethesandbox.md new file mode 100644 index 0000000..7318889 --- /dev/null +++ b/04_gettingstarted/02_sandbox/02_usethesandbox.md @@ -0,0 +1,117 @@ +--- +title: How to use the Sandbox +excerpt: Learn how to effectively use the Open Gateway Sandbox, a free and secure environment for testing and refining your applications with real-world API scenarios before deployment. Follow our step-by-step guide to maximize your development process and ensure a smooth transition to production. +category: 66840b9dac745a002559ffad +--- + + +## Registering your application + +Open Gateway APIs access is granted to applications, not developers, so every application can have limited access to the scope and for the purpose it needs. + +[More information on Privacy](../../opengateway/privacy.md) + +Therefore the way to get credentials to test the APIs is to register an application in the Sandbox console. You will use your application credentials to authenticate your requests to the APIs from any test you code no matter if it is actually a comprehensive application or just a tiny script to run from the a command line interface. + +For every application you create, you will need to follow these simple steps to configure it: + +1. Select the APIs you want your application to test. It could be one or several APIs depending on your use case. + +![API selection](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/api-selection.png?raw=true) + +2. Select the usage mode for your application. You have the following options: + + - **Production mode** + + Although our Sandbox is not a Channel Partner's production environment but a testing environment instead, it can route your API calls to our mobile operators to provide a real response if you test your prototype application from a device connected to one of their networks. That requires that you are the mobile line holder and have the SIM card installed in such device. + + Movistar (Spain) is already available for testing from the Telefónica Open Gateway Sandbox, and other Telefónica operators in other countries will be added soon. + + The production mode is disabled by default for Privacy reasons, but you can enable it by filling in your legal information and accepting the terms and conditions in the form that the Sandbox console will offer you for that purpose. You will have to provide some mobile phone numbers of your own which will be added to a whitelist that will allow you to test the APIs in production mode from your own devices and will block API usage accessing someone else's personal data. + + - **Mock mode** + + You can test your application without the need to have a SIM card from one of our mobile operators. The Sandbox will provide you with a mock response for every API call you make. + + The mock mode will also make available for you some APIs that are not still commercially available on our mobile operators, so you can test them in advance. + +![Usage mode](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/usage-mode.png?raw=true) + +3. Briefly describe your application as part of the application onboarding process so that mobile operators can understand the purpose of your tests and validate it. + + Since it is a testing environment, your application won't be rejected as per this information, but our Sandbox uses standard procedures to register applications in the mobile operators' systems which takes this data as mandatory. + + These are the fields you need to fill in: + + - **Name**: A name to identify your application by the operators as an Open Gateway APIs consumer. + - **Full name**: Your application's commercial name by which operators can find it in your website or application stores. + - **Description**: A brief description of your application's use case related to the usage of the APIs. + - **Redirect URL**: (Optional) For frontend triggered authorization flows, you must indicate an URI hosted on your servers for the flow to call back to your code for it to complete authorization and perform the service API request (check [frontend triggered authorization flow](/authentication/frontend.md) for detailed information). + +![App information](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/app-information.png?raw=true) + +4. Check the specifications and accept the terms and conditions per API and operator. + + Each mobile operator has its own terms and conditions for the usage of each API, and its own technical specifications you will want to consider when it comes to consuming them, so you will need to accept them for each API you want to test on each operator you have previously selected. + + Since our Sandbox is just a free testing environment, specifications are not binding and conditions are meant for safeguarding privacy, even given that only whitelisted phone numbers can be used when testing in the Production mode with our mobile operators. In the case of the Mock mode, a global simulated operator will provide you with mock responses being the terms and conditions of the program you are member to that applies. + +![Check specifications and conditions per API and operator](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/app-configuration.png?raw=true) + +5. Review the summary and confirm + +![Review the summary and confirm](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/review-confirm.png?raw=true) + +6. Once you have confirmed, your application is granted access to the Sandbox API gateway with its credentials. + +![alt text](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/app-created.png?raw=true) + +To get your application credentials and use them in your prototype, go to the application details page on the My Apps section, where you will find the following information: + +- **Client ID**: A unique identifier for your application. +- **Client Secret**: A secret key to authenticate your application to the APIs. + +![alt text](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/app-credentials.png?raw=true) + +Note that if you selected the Production mode, you will have to wait for the approval of your application by the mobile operators you selected. When your application status is "Completed" you are good to test the APIs with your applications's credentials no matter what end-user phone number you are using. If you only selected the Mock mode, you can start testing right away. + +## Using the APIs + +So far you have used the Sandbox console to register your application as the client to the APIs which means your application is the entity granted access with its credentials. + +Now you will use such credentials to effectively consume de APIs from your code. You can use any programming language and any platform that supports HTTP requests, or you can use SDKs for convenience. The offering of SDKs in different programming languages depends on your Channel Partner of choice at the commercial stage. For testing purposes, our Open Gateway Sandbox provides you with a Python SDK and will publish SDK in other common languages soon. + +### HTTP integration + +#### Pros and cons +- Pros: + - No dependencies on third-party libraries + - No need to learn a new SDK + - Portability across different Channel Partners (which provide their own SDKs) +- Cons: + - More low-level tasks to care about: encoding your credentials, calling authorization endpoints, handling tokens, etc. + - More difficult to implement + - More verbose code + - More error-prone code + +#### API reference + +You can check the OpenAPI v3 specification of each API in the [Open Gateway APIs](../../02_apis/01_apis.md) guide. + +### Sandbox SDK + +#### Pros and cons +- Pros: + - Low-level tasks are abstracted: you instantiate a class with your application credentials and the instance will handle authentication and token management for you + - Further features could be included by the Channel Partner in the SDK: for instance, frontend SDKs handling network interfaces to avoid authentication problems caused by end-user device being connected to Wi-Fi networks + - Less code to write + - Less error-prone code + - Easier to implement +- Cons: + - It is up to your Channel Partner to provide SDKs in different programming languages including your app's one. Once you shift to a Channel Partner, your production code will need to use their SDKs instead of the Sandbox's one you used for testing and prototyping or, in the worst case, you will have to use the HTTP integration method instead if no SDK is available for your app's language. + - Our Sandbox does not provide a fronted SDK, so if the use case you are prototyping triggers the authorization flow from the end-user device, you will need to implement it by coding HTTP integration. Once you progress to a production stage, you need to check your Channel Partner toolkit offering. + - Consequently to the above, once in a production stage, you will less portability across different Channel Partners + +#### SDK reference + +You can check the reference of the current Sandbox SDK reference in the [Python Sandbox SDK](02_sdkreference.md) guide. The scope of the APIs covered and the programming languages supported will be extended progressively according to the Sandbox roadmap. diff --git a/04_gettingstarted/02_sandbox/03_sdkreference.md b/04_gettingstarted/02_sandbox/03_sdkreference.md new file mode 100644 index 0000000..b9b826a --- /dev/null +++ b/04_gettingstarted/02_sandbox/03_sdkreference.md @@ -0,0 +1,7 @@ +--- +title: Sandbox Python SDK reference +excerpt: Reference guide to the Sandbox Python SDK on how to authorize, instantiate and use its service classes to access the Open Gateway APIs. +category: 66840b9dac745a002559ffad +--- + +(WIP) From 054e197d0c9f89e44b682c3412c117db8b1d98f3 Mon Sep 17 00:00:00 2001 From: Diego Rivera Date: Tue, 3 Sep 2024 12:13:22 +0200 Subject: [PATCH 3/9] Clean up OpenAPI specs from CAMARA --- .../numberverification_openapi.yaml | 25 +++------ catalog/simswap/simswap_openapi.yaml | 56 ++++++++++--------- 2 files changed, 37 insertions(+), 44 deletions(-) diff --git a/catalog/numberverification/numberverification_openapi.yaml b/catalog/numberverification/numberverification_openapi.yaml index 72db077..3e56169 100644 --- a/catalog/numberverification/numberverification_openapi.yaml +++ b/catalog/numberverification/numberverification_openapi.yaml @@ -35,27 +35,20 @@ info: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html servers: - - url: https://{host}{basePath} + - url: "{apiRoot}/{basePath}" variables: - host: - default: api.example.com - description: Host that serves the API + apiRoot: + default: https://sandbox.opengateway.telefonica.com/apigateway + description: API root basePath: default: /number-verification/v0 description: Base path for the number verification API -tags: - - name: Phone number verify - description: API operation to verify a phone number received as input. It can be received either in plain text or hashed format. - - name: Phone number share - description: API operation to return the phone number associated to the access token. paths: /verify: post: - tags: - - Phone number verify - summary: Verifies if the received hashed/plain text phone number matches the phone number associated with the access token + summary: Verify a phone number description: | - Verifies if the specified phone number (plain text or hashed format) matches the one that the user is currently using. + Verifies if the specified phone number (plain text or hashed format) matches the one associated with the access token. - The number verification will be done for the user that has authenticated via mobile network and so their `sub` is in the access token - It returns true/false depending on if the hashed phone number received as input matches the authenticated user's `device phone number` associated to the access token operationId: phoneNumberVerify @@ -101,11 +94,9 @@ paths: - number-verification-verify-read /device-phone-number: get: - tags: - - Phone number share - summary: Returns the phone number associated with the access token + summary: Get the end-user phone number description: | - Returns the phone number so the API clients can verify the number themselves: + Returns the phone number associated with the access token so the API clients can verify the number themselves: - It will be done for the user that has authenticated via mobile network and so their `sub` is in the access token - It returns the authenticated user's `device phone number` associated to the access token operationId: phoneNumberShare diff --git a/catalog/simswap/simswap_openapi.yaml b/catalog/simswap/simswap_openapi.yaml index 7570360..ae54009 100644 --- a/catalog/simswap/simswap_openapi.yaml +++ b/catalog/simswap/simswap_openapi.yaml @@ -23,39 +23,40 @@ externalDocs: description: Product documentation at Camara url: https://github.com/camaraproject/ servers: - - url: "{apiRoot}/{basePath}" + - url: "{apiGatewayUrl}/sim-swap/{version}" variables: - apiRoot: - default: http://localhost:9091 - description: API root - basePath: - default: sim-swap/v0 - description: Base path for the simSwap API + apiGatewayUrl: + default: https://sandbox.opengateway.telefonica.com/apigateway + description: API gateway URL + version: + default: /v0 + description: Base path for the SIM Swap API paths: - /retrieve-date: + /check: post: + summary: /check + tags: + - Check for a SIM swap security: - three_legged: - - retrieve-sim-swap-date - tags: - - Retrieve SIM swap date - description: Get timestamp of last MSISDN <-> IMSI pairing change for a mobile user account provided with MSIDN. - operationId: retrieveSimSwapDate + - check-sim-swap + description: Check if SIM swap has been performed during a past period + operationId: checkSimSwap requestBody: description: | - Create a SIM swap date request for a MSISDN identifier. + Create a check SIM swap request for a MSISDN identifier. content : application/json: schema: - $ref: "#/components/schemas/CreateSimSwapDate" + $ref: "#/components/schemas/CreateCheckSimSwap" required: true responses: "200": - description: Contains information about SIM swap change + description: Returns whether a SIM swap has been performed during a past period content: application/json: schema: - $ref: "#/components/schemas/SimSwapInfo" + $ref: "#/components/schemas/CheckSimSwapInfo" "400": $ref: "#/components/responses/Generic400" "401": @@ -72,30 +73,31 @@ paths: $ref: "#/components/responses/Generic503" "504": $ref: "#/components/responses/Generic504" - /check: + /retrieve-date: post: + summary: /retrieve-date + tags: + - Retrieve latest SIM swap date security: - three_legged: - - check-sim-swap - tags: - - Check SIM swap - description: Check if SIM swap has been performed during a past period - operationId: checkSimSwap + - retrieve-sim-swap-date + description: Get timestamp of last MSISDN <-> IMSI pairing change for a mobile user account provided with MSIDN. + operationId: retrieveSimSwapDate requestBody: description: | - Create a check SIM swap request for a MSISDN identifier. + Create a SIM swap date request for a MSISDN identifier. content : application/json: schema: - $ref: "#/components/schemas/CreateCheckSimSwap" + $ref: "#/components/schemas/CreateSimSwapDate" required: true responses: "200": - description: Returns whether a SIM swap has been performed during a past period + description: Contains information about SIM swap change content: application/json: schema: - $ref: "#/components/schemas/CheckSimSwapInfo" + $ref: "#/components/schemas/SimSwapInfo" "400": $ref: "#/components/responses/Generic400" "401": From a1ef969be14957dc4fea49bb81eacd09e53ad339 Mon Sep 17 00:00:00 2001 From: mtnieto Date: Wed, 4 Sep 2024 09:56:06 +0200 Subject: [PATCH 4/9] merge main into web/mt --- ...dme-guides.yml => rdme-guides-openapi.yml} | 16 + 01_introduction/04_privacy.md | 7 - 02_apis/01_apis.md | 50 --- 02_apis/02_simswap/simswap_openapi.yaml | 0 .../numberverification_openapi.yaml | 0 03_authentication/01_authentication.md | 5 - 03_authentication/02_frontend.md | 5 - 03_authentication/03_backend.md | 5 - README.md | 35 ++ .../architecture.md | 0 .../03_camara.md => about/camara.md | 0 .../05_glossary.md => about/glossary.md | 0 .../images/architecture.png | Bin .../01_whatis.md => about/initiative.md | 2 +- about/privacy.md | 7 + callflows/apiintegration.md | 39 +++ callflows/authorization/authorization.md | 7 + callflows/authorization/backend.md | 7 + callflows/authorization/frontend.md | 7 + catalog/available.md | 37 +++ .../numberverification/numberverification.md | 0 .../numberverification_openapi.yaml | 311 ++++++++++++++++++ catalog/roadmap.md | 35 ++ .../simswap/simswap.md | 0 catalog/simswap/simswap_openapi.yaml | 267 +++++++++++++++ gettingstarted/programs.md | 37 +++ .../sandbox}/01_introsandbox.md | 0 .../sandbox}/02_usethesandbox.md | 0 .../sandbox}/03_sdkreference.md | 0 .../sandbox}/images/access.png | Bin .../sandbox}/images/api-selection.png | Bin .../sandbox}/images/app-configuration.png | Bin .../sandbox}/images/app-created.png | Bin .../sandbox}/images/app-credentials.png | Bin .../sandbox}/images/app-information.png | Bin .../sandbox}/images/review-confirm.png | Bin .../sandbox}/images/usage-mode.png | Bin .../sandbox/sandbox.md | 43 +-- .../sandbox/sdkreference.md | 2 +- 39 files changed, 818 insertions(+), 106 deletions(-) rename .github/workflows/{rdme-guides.yml => rdme-guides-openapi.yml} (57%) delete mode 100644 01_introduction/04_privacy.md delete mode 100644 02_apis/01_apis.md delete mode 100644 02_apis/02_simswap/simswap_openapi.yaml delete mode 100644 02_apis/03_numberverification/numberverification_openapi.yaml delete mode 100644 03_authentication/01_authentication.md delete mode 100644 03_authentication/02_frontend.md delete mode 100644 03_authentication/03_backend.md rename 01_introduction/02_architecture.md => about/architecture.md (100%) rename 01_introduction/03_camara.md => about/camara.md (100%) rename 01_introduction/05_glossary.md => about/glossary.md (100%) rename {01_introduction => about}/images/architecture.png (100%) rename 01_introduction/01_whatis.md => about/initiative.md (99%) create mode 100644 about/privacy.md create mode 100644 callflows/apiintegration.md create mode 100644 callflows/authorization/authorization.md create mode 100644 callflows/authorization/backend.md create mode 100644 callflows/authorization/frontend.md create mode 100644 catalog/available.md rename 02_apis/03_numberverification/01_numberverification.md => catalog/numberverification/numberverification.md (100%) create mode 100644 catalog/numberverification/numberverification_openapi.yaml create mode 100644 catalog/roadmap.md rename 02_apis/02_simswap/01_simswap.md => catalog/simswap/simswap.md (100%) create mode 100644 catalog/simswap/simswap_openapi.yaml create mode 100644 gettingstarted/programs.md rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/01_introsandbox.md (100%) rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/02_usethesandbox.md (100%) rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/03_sdkreference.md (100%) rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/images/access.png (100%) rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/images/api-selection.png (100%) rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/images/app-configuration.png (100%) rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/images/app-created.png (100%) rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/images/app-credentials.png (100%) rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/images/app-information.png (100%) rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/images/review-confirm.png (100%) rename {04_gettingstarted/02_sandbox => gettingstarted/sandbox}/images/usage-mode.png (100%) rename 04_gettingstarted/02_sandbox/01_sandbox.md => gettingstarted/sandbox/sandbox.md (75%) rename 04_gettingstarted/02_sandbox/02_sdkreference.md => gettingstarted/sandbox/sdkreference.md (84%) diff --git a/.github/workflows/rdme-guides.yml b/.github/workflows/rdme-guides-openapi.yml similarity index 57% rename from .github/workflows/rdme-guides.yml rename to .github/workflows/rdme-guides-openapi.yml index 930d92d..a35638c 100644 --- a/.github/workflows/rdme-guides.yml +++ b/.github/workflows/rdme-guides-openapi.yml @@ -21,3 +21,19 @@ jobs: uses: readmeio/rdme@v8 with: rdme: guides . --key=${{ secrets.README_API_KEY }} --version=1.0 + + rdme-openapi: + runs-on: ubuntu-latest + steps: + - name: Check out repo 📚 + uses: actions/checkout@v3 + + - name: Run `openapi` command 🚀 + uses: readmeio/rdme@v8 + with: + rdme: openapi catalog/simswap/simswap_openapi.yaml --key=${{ secrets.README_API_KEY }} --id=66d6d367c3032f006ebc2534 + + - name: Run `openapi` command 🚀 + uses: readmeio/rdme@v8 + with: + rdme: openapi catalog/numberverification/numberverification_openapi.yaml --key=${{ secrets.README_API_KEY }} --id=66d6da62784552006304adcb diff --git a/01_introduction/04_privacy.md b/01_introduction/04_privacy.md deleted file mode 100644 index f5b09eb..0000000 --- a/01_introduction/04_privacy.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Privacy at Open Gateway -excerpt: Open Gateway as an industry initiative is Privacy by Design to provide developers with telco capabilities while ensuring user data privacy and security. -category: 66840b9dac745a002559ffad ---- - -# Privacy at Open Gateway \ No newline at end of file diff --git a/02_apis/01_apis.md b/02_apis/01_apis.md deleted file mode 100644 index 3f675ef..0000000 --- a/02_apis/01_apis.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Open Gateway APIs -excerpt: The Open Gateway initiative is led to create a standardized framework of Application Programming Interfaces (APIs) that enables simplified and universal access to advanced mobile network capabilities and associated services. Designed to promote interoperability, innovation, and operational efficiency within the digital ecosystem, Open Gateway APIs are essential for modern application development. -category: 66aa4f941e51e7000fa353ce ---- - -Open Gateway enables software developers to leverage Network Application Programming Interfaces (APIs) for building applications that seamlessly communicate with underlying networks. These APIs provide a consistent method for accessing analytical and statistical data from networks, facilitating the implementation of customer experience-focused use cases. Open Gateway empowers developers to retrieve network information and request configuration changes efficiently. - -Open Gateway utilizes these network APIs to offer a unified standard interface across multiple operator networks worldwide, abstracting the inherent complexities associated with network APIs. This approach simplifies integration and enhances interoperability for developers and applications alike. - -## Technical Description of Open Gateway APIs - -### Interoperability and Open Standards - -Open Gateway APIs are built on open standards that ensure interoperability between different telecommunications operators and development platforms. By adopting common technical specifications and universal protocols, these APIs facilitate the integration of services and applications across various mobile networks, including 4G, 5G, and future technologies. - -### API Architecture - -Open Gateway APIs are designed using a _RESTful_ (Representational State Transfer) architecture, enabling simple and efficient communication between clients and servers through standard HTTP methods such as GET, POST, PUT, and DELETE. This architecture is highly scalable and easy to implement, making it ideal for distributed and high-performance environments. - -### Security and Authentication - -Open Gateway APIs implement robust security and authentication mechanisms to protect data integrity and confidentiality. This includes the use of _OAuth 2.0_ for authorization and _JWT_ (JSON Web Tokens) for secure user and application authentication. - -## Available APIs - -### SIM Swap - -The **standardized SIM Swap API** enables seamless integration of **SIM swap detection** and **management functionality** into your applications. This API enhances security by **identifying potentially fraudulent activity** and providing an **additional layer of protection** against unauthorized access. - -Additionally, the **SIM Swap's Unified API Access** feature ensures **access to network capabilities** of various carriers through a **single, standardized interface**. This simplifies integration and improves efficiency for developers by consolidating access to multiple carrier networks. - -### Device location - -The standardised Device Location Verification API provides the option of verifying the geographical location of a given SIM-based device and validating whether it is within a requested geographical area without spoofing or GPS. - -This solution validates the location of a device to enable services or allow transactions by verifying the location. - - -### Number Verification API - -The **standardized Number Verification API** enhances the security of your users' identities and credentials. This API provides a quick, convenient, reliable, and secure method for verifying user information, ensuring robust protection against unauthorized access. - -### Quality on Demand Mobile (QoD Mobile) API - -The **standardized QoD Mobile API** allows you to manage and control your customers' mobile connectivity. This capability enables you to focus on creating the best possible user experiences, ensuring optimal performance and reliability for mobile applications. - -### Quality on Demand WiFi (QoD WiFi) API - -The **QoD WiFi API** lets you configure and manage the quality of service for devices connected to a single Wi-Fi network. This API enhances the user experience for digital services within the home by providing greater control over the quality of service on demand. It is especially useful for technologies such as virtual reality, augmented reality, cloud gaming, and voice over IP. diff --git a/02_apis/02_simswap/simswap_openapi.yaml b/02_apis/02_simswap/simswap_openapi.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/02_apis/03_numberverification/numberverification_openapi.yaml b/02_apis/03_numberverification/numberverification_openapi.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/03_authentication/01_authentication.md b/03_authentication/01_authentication.md deleted file mode 100644 index 62f753b..0000000 --- a/03_authentication/01_authentication.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Authentication -excerpt: Guide to authentication mechanisms and best practices for secure access to Open Gateway APIs -category: 66840b9dac745a002559ffad ---- diff --git a/03_authentication/02_frontend.md b/03_authentication/02_frontend.md deleted file mode 100644 index 0284f40..0000000 --- a/03_authentication/02_frontend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Frontend authentication -excerpt: Guide to authentication mechanisms and best practices for secure access to Open Gateway APIs on flows triggered from the frontend -category: 66840b9dac745a002559ffad ---- diff --git a/03_authentication/03_backend.md b/03_authentication/03_backend.md deleted file mode 100644 index 93f6a30..0000000 --- a/03_authentication/03_backend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Backend authentication -excerpt: Guide to authentication mechanisms and best practices for secure access to Open Gateway APIs on backend flows -category: 66840b9dac745a002559ffad ---- diff --git a/README.md b/README.md index ab82c5c..b245373 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,41 @@ This repository is the source of content to the Open Gateway's developers website. Each page in the website must be linked to a markdown file in this repository and will get updated and published as the result of a pull request for every change. +## Table of contents +The contents in this repo are meant to be organized in the following structure and order. Folding and sorting to be set by the Readme.com site admin in the website configuration: + +- About Open Gateway + - [The Open Gateway Initiative](about/initiative.md) + - [API Architecture](about/architecture.md) + - [CAMARA project](about/camara.md) + - [Privacy by Design](about/privacy.md) + - [Glossary of Terms](about/glossary.md) +- Getting Started + - [Join our Programs](gettingstarted/programs.md) + - [Sandbox](gettingstarted/sandbox/sandbox.md) + - [Sandbox SDK reference](gettingstarted/sandbox/sdkreference.md) +- API Call Flows + - [API Integration](callflows/apiintegration.md) + - [Authorization](callflows/authorization/authorization.md) + - [Frontend flow](callflows/authorization/frontend.md) + - [Backend flow](callflows/authorization/backend.md) +- API Catalog + - [Available APIs](catalog/available.md) + - [SIM Swap](catalog/simswap/simswap.md) + - [Number Verification](catalog/numberverification/numberverification.md) + - For each API available on our Sandbox or on any Channel Partner (see above): + - About the API + - API reference on Readme.com + - Sample code + - HTTP integration + - Using the Sandbox SDK + - Using a generic Channel Partner SDK (alternative CTA) + - Open-source comprehensive sample application (GitHub repo) + - [API Roadmap](catalog/roadmap.md) + - For every API not yet commercially available: + - Link to the API documentation on the Open Gateway website + - Link to the API reference on CAMARA's GitHub repository + ## How to contribute - [ ] Clone this repository - [ ] Create a new branch called `your-name/the-change` diff --git a/01_introduction/02_architecture.md b/about/architecture.md similarity index 100% rename from 01_introduction/02_architecture.md rename to about/architecture.md diff --git a/01_introduction/03_camara.md b/about/camara.md similarity index 100% rename from 01_introduction/03_camara.md rename to about/camara.md diff --git a/01_introduction/05_glossary.md b/about/glossary.md similarity index 100% rename from 01_introduction/05_glossary.md rename to about/glossary.md diff --git a/01_introduction/images/architecture.png b/about/images/architecture.png similarity index 100% rename from 01_introduction/images/architecture.png rename to about/images/architecture.png diff --git a/01_introduction/01_whatis.md b/about/initiative.md similarity index 99% rename from 01_introduction/01_whatis.md rename to about/initiative.md index 5a27840..2af0201 100644 --- a/01_introduction/01_whatis.md +++ b/about/initiative.md @@ -1,5 +1,5 @@ --- -title: Open Gateway +title: The Open Gateway Initiative excerpt: Welcome to Open Gateway APIs, your gateway to leveraging advanced network capabilities in your applications. Whether you're a seasoned developer or just starting your journey, Open Gateway APIs provide the tools and resources you need to create innovative, high-performance applications. category: 66840b9dac745a002559ffad --- diff --git a/about/privacy.md b/about/privacy.md new file mode 100644 index 0000000..1c5cdfd --- /dev/null +++ b/about/privacy.md @@ -0,0 +1,7 @@ +--- +title: Privacy by Design +excerpt: Open Gateway as an industry initiative has been designed with end-user's privacy in mind, to provide developers with telco capabilities while ensuring user data privacy and security. +category: 66840b9dac745a002559ffad +--- + +# Privacy at Open Gateway \ No newline at end of file diff --git a/callflows/apiintegration.md b/callflows/apiintegration.md new file mode 100644 index 0000000..d2e3375 --- /dev/null +++ b/callflows/apiintegration.md @@ -0,0 +1,39 @@ +--- +title: API Integration +excerpt: In this guide we will go through the different ways to integrate with Open Gateway APIs so you can find the best fit for your use case and the offering from our Channel Partners. +category: 66d57750d3f60b0011576376 +--- + +Since Open Gateway APIs are RESTful, you will always be able to integrate them by performing HTTP requests from any programming language providing such capability. However, most Channel Partners will provide you with SDKs in several programming languages which, by performing such requests themselves under the hood, will make your life easier when it comes to accessing the telco features that Open Gateway offers to your application. + +Apart from their commercial offer, check the offering of SDKs, our any other development tools, from your our Channel Partners to better suite to your use case and application needs. + +These are some pros and cons you could get from the following two ways of integrating Open Gateway APIs: + +### HTTP integration + +#### Pros and cons +- Pros: + - No dependencies on third-party libraries + - No need to learn a new SDK + - Portability across different Channel Partners (which provide their own SDKs each) +- Cons: + - More low-level tasks to care about: encoding your credentials, calling authorization endpoints, handling tokens, etc. + - More difficult to implement + - More verbose code + - More error-prone code + +### Integration by SDKs + +#### Pros and cons +- Pros: + - Low-level tasks are abstracted: SDK's classes will take your application credentials as an input and will handle authentication and token management for you + - Further features could be included by the Channel Partner in the SDK: for instance, frontend SDKs handling network interfaces to avoid authentication problems caused by end-user device being connected to Wi-Fi networks + - Also... + - Less code to write + - Less error-prone code + - Easier to implement integration +- Cons: + - It is up to your Channel Partner to provide SDKs in different programming languages including your app's one + - Depending on your Channel Partner and your use case, you could need to implement a frontend authorization flow and there could be a lack of frontend SDKs (e.g. for native mobile apps) which would lead you to integrate the frontend authorization by performing HTTP requests anyway + - Once you have integrated the SDKs from a Channel Partner, you would need some re-engineering to switch to another Channel Partner's Open Gateway platform, since each one offer their owns and SDK interfaces are not standardized at CAMARA. diff --git a/callflows/authorization/authorization.md b/callflows/authorization/authorization.md new file mode 100644 index 0000000..c582c1f --- /dev/null +++ b/callflows/authorization/authorization.md @@ -0,0 +1,7 @@ +--- +title: Authorization +excerpt: In this guide you will find a briefly introduction to authorization mechanisms and best practices for secure access to Open Gateway APIs +category: 66d57750d3f60b0011576376 +--- + +(WIP) \ No newline at end of file diff --git a/callflows/authorization/backend.md b/callflows/authorization/backend.md new file mode 100644 index 0000000..6b4c81e --- /dev/null +++ b/callflows/authorization/backend.md @@ -0,0 +1,7 @@ +--- +title: Backend authorization flow +excerpt: If your use case does not involve end-user's interaction you will want to integrate with Open Gateway APIs from the backend. This guide will help you understand the flows to get your application authorized to call the APIs from your server or any other environment without a human interface. +category: 66d57750d3f60b0011576376 +--- + +(WIP) \ No newline at end of file diff --git a/callflows/authorization/frontend.md b/callflows/authorization/frontend.md new file mode 100644 index 0000000..794d869 --- /dev/null +++ b/callflows/authorization/frontend.md @@ -0,0 +1,7 @@ +--- +title: Frontend authorization flow +excerpt: If your application offers a human interface to provide your users with features enabled by Open Gateway, this is its frontend component, running on the end-user's device, that will trigger the API calling flow. This guide will show you how to authorize your application by identifying the end-user from their network connected devices. +category: 66d57750d3f60b0011576376 +--- + +(WIP) \ No newline at end of file diff --git a/catalog/available.md b/catalog/available.md new file mode 100644 index 0000000..9bd04b6 --- /dev/null +++ b/catalog/available.md @@ -0,0 +1,37 @@ +--- +title: Available APIs +excerpt: The Open Gateway initiative is led to create a standardized framework of Application Programming Interfaces (APIs) that enables simplified and universal access to advanced mobile network capabilities and associated services. Designed to promote interoperability, innovation, and operational efficiency within the digital ecosystem, Open Gateway APIs are essential for modern application development. +category: 66aa4f941e51e7000fa353ce +--- + +Open Gateway enables software developers to leverage Telco Application Programming Interfaces (Telco APIs) for building applications that seamlessly integrate our underlying networks' capabilities and operators' data. These APIs provide a consistent method for accessing analytical and statistical data from networks, facilitating the implementation of customer experience-focused use cases. Open Gateway empowers developers to retrieve network information and request configuration changes efficiently. + +Open Gateway utilizes these Telco APIs to offer a unified standard interface across multiple operator networks worldwide, abstracting the inherent complexities associated with their systems and infrastructures. This approach simplifies integration and enhances interoperability for developers and applications alike. + +## Technical Description of Open Gateway APIs + +### Interoperability and Open Standards + +Open Gateway APIs are built on open standards that ensure interoperability between different telecommunications operators and development platforms. By adopting common technical specifications and universal protocols, these APIs facilitate the integration of services and applications across various mobile networks, including 4G, 5G, and future technologies. + +### API Architecture + +Open Gateway APIs are designed using a _RESTful_ (Representational State Transfer) architecture, enabling simple and efficient communication between clients and servers through standard HTTP methods such as GET, POST, PUT, and DELETE. This architecture is highly scalable and easy to implement, making it ideal for distributed and high-performance environments. + +### Security and Authentication + +Open Gateway APIs implement robust security and authentication mechanisms to protect data integrity and confidentiality. This includes the use of _OAuth 2.0_ for authorization and _JWT_ (JSON Web Tokens) for secure user and application authentication. + +## Commercially available APIs + +As the Open Gateway Channel Partners start aggregating the APIs from the operators, the following APIs are already available in some regions for developers to use: + +### SIM Swap + +The standardized SIM Swap API enables seamless integration of SIM swap detection and management functionality into your applications. This API enhances security by identifying potentially fraudulent activity and providing an additional layer of protection against unauthorized access. + +Additionally, the SIM Swap's Unified API Access feature ensures access to network capabilities of various carriers through a single, standardized interface. This simplifies integration and improves efficiency for developers by consolidating access to multiple carrier networks. + +### Number Verification API + +The standardized Number Verification API enhances the security of your users' identities and credentials. This API provides a quick, convenient, reliable, and secure method for verifying user information, ensuring robust protection against unauthorized access. diff --git a/02_apis/03_numberverification/01_numberverification.md b/catalog/numberverification/numberverification.md similarity index 100% rename from 02_apis/03_numberverification/01_numberverification.md rename to catalog/numberverification/numberverification.md diff --git a/catalog/numberverification/numberverification_openapi.yaml b/catalog/numberverification/numberverification_openapi.yaml new file mode 100644 index 0000000..3e56169 --- /dev/null +++ b/catalog/numberverification/numberverification_openapi.yaml @@ -0,0 +1,311 @@ +openapi: 3.0.3 +info: + title: Number Verification + description: | + Service Enabling Network Function API to verify that the provided **mobile phone number** is the one used in the device. It verifies that the user is using a device with the same *mobile phone number* as it is declared. + It also makes it possible for a Service provider to verify the number itself by returning the phone number associated to the authenticated user's access token. + + In this API **phone number** term refers to the mobile phone number + + # API Functionality + This enables a Service Provider (SP) to verify the phone number of the mobile device being used to access their service where the mobile device is accessing the *service provider* over a mobile network (WiFi connections are out of this API scope). This can happen either by getting the comparison result or receiving the phone number of the device that is used, so they can verify it themselves. + + # Resources and Operations overview + This API currently provides two endpoints where both require a **3-legged token** and authentication via **mobile network** (**excluding** for example by SMS/OTP or user/password as an authentication method): + - The first one checks if the user mobile phone number matches the phone number associated with the mobile device. It can receive either a hashed or a plain text phone number as input and it compares the received input with the authenticated user's phone number associated to the access token in order to respond **true/false**. + - The next one retrieves the phone number associated to the user's token and returns it so the verification can be made by the service provider. + + # Sequence Diagram + Number Verification API uses the **standard [OAuth2 Authorization Code grant](https://www.rfc-editor.org/rfc/rfc6749#section-4.1)**. The following diagram will help to clarify the end-to-end process, including previous steps prior to this API call. + + ![UML Sequence Diagram](https://github.com/camaraproject/NumberVerification/blob/main/documentation/API_documentation/CAMARA/uml_v0.3.jpg?raw=true) + + **Additional details:** + + - **(1):** Authentication must be automatic without any user interactions. Authentication methods such as SMS OTP or user/password are incompatible, as the goal is to validate the mobile phone number that is accessing the App. So it is required to be authentication via mobile network and without the user being involved. the use of parameter prompt=none, as described in **[OIDC Connect](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest)**, ensures no user interaction. + + - **(2):** The way in which the phone_number is retrieved depends on the implementation. For example, access token may be a self contained encrypted JWT, so API can decrypt and identify phone_number. Some other implementations might request the phone_number associated to the token from Authserver. + version: 0.3.1 + termsOfService: http://example.com/terms/ + contact: + name: API Support + url: http://www.example.com/support + email: support@example.com + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html +servers: + - url: "{apiRoot}/{basePath}" + variables: + apiRoot: + default: https://sandbox.opengateway.telefonica.com/apigateway + description: API root + basePath: + default: /number-verification/v0 + description: Base path for the number verification API +paths: + /verify: + post: + summary: Verify a phone number + description: | + Verifies if the specified phone number (plain text or hashed format) matches the one associated with the access token. + - The number verification will be done for the user that has authenticated via mobile network and so their `sub` is in the access token + - It returns true/false depending on if the hashed phone number received as input matches the authenticated user's `device phone number` associated to the access token + operationId: phoneNumberVerify + parameters: + - in: header + name: x-correlator + required: false + description: Correlation id for the different services + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NumberVerificationRequestBody' + required: true + responses: + '200': + description: OK + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/NumberVerificationMatchResponse' + '400': + $ref: '#/components/responses/Generic400' + '401': + $ref: '#/components/responses/Generic401' + '403': + $ref: '#/components/responses/PhoneNumberVerificationPermissionDenied403' + '500': + $ref: '#/components/responses/Generic500' + '503': + $ref: '#/components/responses/Generic503' + '504': + $ref: '#/components/responses/Generic504' + security: + - three_legged: + - number-verification-verify-read + /device-phone-number: + get: + summary: Get the end-user phone number + description: | + Returns the phone number associated with the access token so the API clients can verify the number themselves: + - It will be done for the user that has authenticated via mobile network and so their `sub` is in the access token + - It returns the authenticated user's `device phone number` associated to the access token + operationId: phoneNumberShare + parameters: + - in: header + name: x-correlator + required: false + description: Correlation id for the different services + schema: + type: string + responses: + '200': + description: OK + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/NumberVerificationShareResponse' + '400': + $ref: '#/components/responses/Generic400' + '401': + $ref: '#/components/responses/Generic401' + '403': + $ref: '#/components/responses/PhoneNumberVerificationPermissionDenied403' + '500': + $ref: '#/components/responses/Generic500' + '503': + $ref: '#/components/responses/Generic503' + '504': + $ref: '#/components/responses/Generic504' + security: + - three_legged: + - number-verification-share-read +components: + securitySchemes: + three_legged: + type: openIdConnect + openIdConnectUrl: https://example.com/.well-known/openid-configuration + schemas: + NumberVerificationRequestBody: + type: object + description: Payload to verify the phone number + oneOf: + - $ref: '#/components/schemas/PhoneNumber' + - $ref: '#/components/schemas/HashedPhoneNumber' + PhoneNumber: + type: object + properties: + phoneNumber: + description: A phone number belonging to the user in **E.164 format (starting with country code)**. Optionally prefixed with '+'. + type: string + example: '+346661113334' + HashedPhoneNumber: + type: object + properties: + hashedPhoneNumber: + description: Hashed phone number. SHA-256 (in hexadecimal representation) of the mobile phone number in **E.164 format (starting with country code)**. Optionally prefixed with '+'. + type: string + example: 32f67ab4e4312618b09cd23ed8ce41b13e095fe52b73b2e8da8ef49830e50dba + NumberVerificationMatchResponse: + type: object + description: Number verification result + required: + - devicePhoneNumberVerified + properties: + devicePhoneNumberVerified: + $ref: '#/components/schemas/DevicePhoneNumberVerified' + NumberVerificationShareResponse: + type: object + description: Number verification share result + required: + - devicePhoneNumber + properties: + devicePhoneNumber: + $ref: '#/components/schemas/DevicePhoneNumber' + DevicePhoneNumber: + description: The device phone number associated to the access token in **E.164 format (starting with country code)**. Optionally prefixed with '+'. + type: string + example: '+346661113334' + DevicePhoneNumberVerified: + description: Number verification. True, if it matches + type: boolean + ErrorInfo: + type: object + required: + - status + - code + - message + properties: + status: + type: integer + description: HTTP response status code + code: + type: string + description: Code given to this error + message: + type: string + description: Detailed error description + responses: + Generic400: + description: Problem with the client request + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 400 + code: INVALID_ARGUMENT + message: Client specified an invalid argument, request body or query param + Generic401: + description: Authentication problem with the client request + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 401 + code: UNAUTHENTICATED + message: Request not authenticated due to missing, invalid, or expired credentials + PhoneNumberVerificationPermissionDenied403: + description: | + Client does not have sufficient permission. + In addition to regular scenario of `PERMISSION_DENIED`, other scenarios may exist: + - Client authentication was not via mobile network. In order to check the authentication method, AMR parameter value in the 3-legged user's access token can be used and make sure that the authentication was not either by SMS+OTP nor username/password (`{"code": "NUMBER_VERIFICATION.USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK","message": "Client must authenticate via the mobile network to use this service"}`) + - Phone number cannot be deducted from access token context.(`{"code": "NUMBER_VERIFICATION.INVALID_TOKEN_CONTEXT","message": "Phone number cannot be deducted from access token context"}`) + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + examples: + PermissionDenied: + value: + status: 403 + code: PERMISSION_DENIED + message: Client does not have sufficient permissions to perform this action + UserNotAuthenticatedByMobileNetwork: + value: + status: 403 + code: NUMBER_VERIFICATION.USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK + message: Client must authenticate via the mobile network to use this service + InvalidTokenContext: + value: + status: 403 + code: NUMBER_VERIFICATION.INVALID_TOKEN_CONTEXT + message: Phone number cannot be deducted from access token context + Generic500: + description: Server error + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 500 + code: INTERNAL + message: Server error + Generic503: + description: Service unavailable. Typically the server is down. + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 503 + code: UNAVAILABLE + message: Service unavailable + Generic504: + description: Request time exceeded. If it happens repeatedly, consider reducing the request complexity + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 504 + code: TIMEOUT + message: Request timeout exceeded. Try later. +externalDocs: + description: Project documentation at CAMARA + url: https://github.com/camaraproject/NumberVerification diff --git a/catalog/roadmap.md b/catalog/roadmap.md new file mode 100644 index 0000000..c35e2fc --- /dev/null +++ b/catalog/roadmap.md @@ -0,0 +1,35 @@ +--- +title: API Roadmap +excerpt: While some APIs are already commercially available on our Channel Partners, others have been already designed and standardized across telcos and are being adopted in order to be soon available and extend the scope of Telco APIs to the developer community. +category: 66aa4f941e51e7000fa353ce +--- + +## Technically available APIs + +The following APIs are already available on most telcos' API exposure platforms, and are about to be made commercially available according to every region's legal and privacy requirements. + +Get sure to get onboarded on the Open Gateway Developer Hub to get early access to these APIs and start testing them in our Sandbox environment. + +### Number Verification API + +The standardized Number Verification API enhances the security of your users' identities and credentials. This API provides a quick, convenient, reliable, and secure method for verifying user information, ensuring robust protection against unauthorized access. + +### Device location + +The standardised Device Location Verification API provides the option of verifying the geographical location of a given SIM-based device and validating whether it is within a requested geographical area without spoofing or GPS. + +This solution validates the location of a device to enable services or allow transactions by verifying the location. + +### Device status + +The standardised Device Status API provides information regarding particular conditions of devices equipped with the end-user's SIM card, such as whether the device is in a roaming state and the country it is in. + +Again, this API enables use cases around specific services related to the end-user's situation, or preventing frauds from foreign locations. + +### Quality on Demand Mobile (QoD Mobile) API + +The standardized QoD Mobile API allows you to manage and control your customers' mobile connectivity. This capability enables you to focus on creating the best possible user experiences, ensuring optimal performance and reliability for mobile applications. + +### Home Devices Quality on Demand (QoD WiFi) API + +The standardized Home Devices QoD API lets you configure and manage the quality of service for devices connected to a single Wi-Fi network. This API enhances the user experience for digital services within the home by providing greater control over the quality of service on demand. It is especially useful for technologies such as virtual reality, augmented reality, cloud gaming, and voice over IP. diff --git a/02_apis/02_simswap/01_simswap.md b/catalog/simswap/simswap.md similarity index 100% rename from 02_apis/02_simswap/01_simswap.md rename to catalog/simswap/simswap.md diff --git a/catalog/simswap/simswap_openapi.yaml b/catalog/simswap/simswap_openapi.yaml new file mode 100644 index 0000000..ae54009 --- /dev/null +++ b/catalog/simswap/simswap_openapi.yaml @@ -0,0 +1,267 @@ +openapi: 3.0.3 +info: + title: SIM Swap + description: | + SIM Swap API provides the customer the ability to obtain information on any recent SIM pairing change related to the User's mobile account. + + This API derives from the GSMA Mobile Connect Account Takeover Protection specification [Mobile Connect Account Takeover Protection](https://www.gsma.com/identity/wp-content/uploads/2022/12/IDY.24-Mobile-Connect-Account-Takeover-Protection-Definition-and-Technical-Requirements-v2.0.pdf). For more about Mobile Connect, please see [about Mobile Connect](https://mobileconnect.io/). + + The API provides 2 operations: + + - POST retrieve-date : Provides timestamp of latest SIM swap + + - POST check: Checks if SIM swap has been performed during a past period (defined in the request with 'maxAge' attribute). + + termsOfService: http://swagger.io/terms/ + contact: + email: project-email@sample.com + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: 0.4.0 +externalDocs: + description: Product documentation at Camara + url: https://github.com/camaraproject/ +servers: + - url: "{apiGatewayUrl}/sim-swap/{version}" + variables: + apiGatewayUrl: + default: https://sandbox.opengateway.telefonica.com/apigateway + description: API gateway URL + version: + default: /v0 + description: Base path for the SIM Swap API +paths: + /check: + post: + summary: /check + tags: + - Check for a SIM swap + security: + - three_legged: + - check-sim-swap + description: Check if SIM swap has been performed during a past period + operationId: checkSimSwap + requestBody: + description: | + Create a check SIM swap request for a MSISDN identifier. + content : + application/json: + schema: + $ref: "#/components/schemas/CreateCheckSimSwap" + required: true + responses: + "200": + description: Returns whether a SIM swap has been performed during a past period + content: + application/json: + schema: + $ref: "#/components/schemas/CheckSimSwapInfo" + "400": + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "409": + $ref: "#/components/responses/Generic409" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + "504": + $ref: "#/components/responses/Generic504" + /retrieve-date: + post: + summary: /retrieve-date + tags: + - Retrieve latest SIM swap date + security: + - three_legged: + - retrieve-sim-swap-date + description: Get timestamp of last MSISDN <-> IMSI pairing change for a mobile user account provided with MSIDN. + operationId: retrieveSimSwapDate + requestBody: + description: | + Create a SIM swap date request for a MSISDN identifier. + content : + application/json: + schema: + $ref: "#/components/schemas/CreateSimSwapDate" + required: true + responses: + "200": + description: Contains information about SIM swap change + content: + application/json: + schema: + $ref: "#/components/schemas/SimSwapInfo" + "400": + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "409": + $ref: "#/components/responses/Generic409" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + "504": + $ref: "#/components/responses/Generic504" +components: + securitySchemes: + three_legged: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://auth.example.com/authorize + tokenUrl: https://auth.example.com/token + scopes: + check-sim-swap: checkSimSwap operation + retrieve-sim-swap-date: retrieveSimSwapDate operation + schemas: + SimSwapInfo: + type: object + properties: + latestSimChange: + type: string + format: date-time + description: Timestamp of latest SIM swap performed + CheckSimSwapInfo: + type: object + properties: + swapped: + type: boolean + description: Indicates whether the SIM card has been swapped during the + period within the provided age. + PhoneNumber: + type: string + pattern: '^\+?[0-9]{5,15}$' + example: '+346661113334' + description: Subscriber number in E.164 format (starting with country code). Optionally prefixed with '+'. + ErrorInfo: + type: object + required: + - status + - code + - message + properties: + status: + type: integer + description: HTTP response status code + code: + type: string + description: Code given to this error + message: + type: string + description: Detailed error description + CreateCheckSimSwap: + type: object + required: + - phoneNumber + properties: + phoneNumber: + $ref: "#/components/schemas/PhoneNumber" + maxAge: + type: integer + example: 240 + description: | + Period in hours to be checked for SIM swap. + format: int32 + minimum: 1 + maximum: 2400 + default: 240 + CreateSimSwapDate: + type: object + required: + - phoneNumber + properties: + phoneNumber: + $ref: "#/components/schemas/PhoneNumber" + responses: + Generic400: + description: Problem with the client request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 400 + code: INVALID_ARGUMENT + message: Client specified an invalid argument, request body or query param + Generic401: + description: Authentication problem with the client request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 401 + code: UNAUTHENTICATED + message: Request not authenticated due to missing, invalid, or expired credentials + Generic403: + description: Client does not have sufficient permission + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 403 + code: PERMISSION_DENIED + message: Client does not have sufficient permissions to perform this action + Generic404: + description: Resource Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 404 + code: SIM_SWAP.UNKNOWN_PHONE_NUMBER + message: SIM Swap can't be checked because the phone number is unknown. + Generic409: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 409 + code: CONFLICT + message: Another request is created for the same MSISDN + Generic500: + description: Server error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 500 + code: INTERNAL + message: Server error + Generic503: + description: Service unavailable. Typically the server is down + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 503 + code: UNAVAILABLE + message: Service unavailable + Generic504: + description: Request time exceeded. If it happens repeatedly, consider reducing the request complexity + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorInfo' + example: + status: 504 + code: TIMEOUT + message: Request timeout exceeded. Try later diff --git a/gettingstarted/programs.md b/gettingstarted/programs.md new file mode 100644 index 0000000..5861326 --- /dev/null +++ b/gettingstarted/programs.md @@ -0,0 +1,37 @@ +--- +title: Join our Programs +excerpt: Find out how to start testing the Open Gateway APIs in our Sandbox or go commercial with one of our Channel Partners +category: 66d5624a492663000f4ed527 +--- + +Once you are familiar with the Open Gateway initiative and the APIs we offer, you will want to have to access additional resources and start testing the APIs into your own prototype applications to perform proofs of concept on your use cases. + +There is two paths you can take according to your profile and the maturity of your project, not exclusive if you want to go through both, which are either testing in the Telefónica's Open Gateway Sandbox environment or shifting to the Open Gateway platform of one of our Channel Partners, closer to a commercial stage. + +## Telefónica Open Gateway Developer Hub + +By joining our Developer Hub you will get early access to the Open Gateway APIs, whether there are already available through any of our Channel Partners or not, as well as the latest news and updates on the Open Gateway initiative. + +One of the main benefits of joining our Developer Hub is having access to the Telefónica Open Gateway Sandbox to actually test the APIs, but there are many other advantages from being part of our community... + +Check the benefits of joining the Telefónica Open Gateway Developer Hub + +### Telefónica Open Gateway Sandbox + +The Open Gateway Sandbox from Telefónica is a free environment where you can test the Open Gateway APIs. It is a great way to start testing the APIs and services in a controlled environment, without the need to sign a contract or pay for the service. + +Our Sandbox will offer you a set of APIs to test, through the same interfaces and same developer experience that our Channel Partners will provide you with. Take into account that this will help getting started faster and easier, but it is not intended for production use but for testing, learning and prototyping instead. + +When you are ready to move to production, you will need to contact one of our Channel Partners and shift your concepts into actual applications which could need porting part of your code, specially if using our Sandbox's SDK, to the Channel Partner's toolkits and be completed with the proper environmental and operational stuff. + +[Check how to get onboarded and start using our Sandbox](sandbox/sandbox.md) + +## Telefónica Open Gateway Partner Program + +Whether you are a developer looking for a Channel Partner providing Open Gateway APIs or services to subscribe or you are interested in becoming a Channel Partner, you can join our Open Gateway Partner Program. + +The Open Gateway Partner Program is a program designed to help different players to collaborate on enhancing or enabling new use cases around Telco capabilities through the Open Gateway APIs. + +Check the benefits of joining the Telefónica Open Gateway Partner Program + +By joining the Open Gateway Partner Program you will also have access to the Telefónica Open Gateway Sandbox. \ No newline at end of file diff --git a/04_gettingstarted/02_sandbox/01_introsandbox.md b/gettingstarted/sandbox/01_introsandbox.md similarity index 100% rename from 04_gettingstarted/02_sandbox/01_introsandbox.md rename to gettingstarted/sandbox/01_introsandbox.md diff --git a/04_gettingstarted/02_sandbox/02_usethesandbox.md b/gettingstarted/sandbox/02_usethesandbox.md similarity index 100% rename from 04_gettingstarted/02_sandbox/02_usethesandbox.md rename to gettingstarted/sandbox/02_usethesandbox.md diff --git a/04_gettingstarted/02_sandbox/03_sdkreference.md b/gettingstarted/sandbox/03_sdkreference.md similarity index 100% rename from 04_gettingstarted/02_sandbox/03_sdkreference.md rename to gettingstarted/sandbox/03_sdkreference.md diff --git a/04_gettingstarted/02_sandbox/images/access.png b/gettingstarted/sandbox/images/access.png similarity index 100% rename from 04_gettingstarted/02_sandbox/images/access.png rename to gettingstarted/sandbox/images/access.png diff --git a/04_gettingstarted/02_sandbox/images/api-selection.png b/gettingstarted/sandbox/images/api-selection.png similarity index 100% rename from 04_gettingstarted/02_sandbox/images/api-selection.png rename to gettingstarted/sandbox/images/api-selection.png diff --git a/04_gettingstarted/02_sandbox/images/app-configuration.png b/gettingstarted/sandbox/images/app-configuration.png similarity index 100% rename from 04_gettingstarted/02_sandbox/images/app-configuration.png rename to gettingstarted/sandbox/images/app-configuration.png diff --git a/04_gettingstarted/02_sandbox/images/app-created.png b/gettingstarted/sandbox/images/app-created.png similarity index 100% rename from 04_gettingstarted/02_sandbox/images/app-created.png rename to gettingstarted/sandbox/images/app-created.png diff --git a/04_gettingstarted/02_sandbox/images/app-credentials.png b/gettingstarted/sandbox/images/app-credentials.png similarity index 100% rename from 04_gettingstarted/02_sandbox/images/app-credentials.png rename to gettingstarted/sandbox/images/app-credentials.png diff --git a/04_gettingstarted/02_sandbox/images/app-information.png b/gettingstarted/sandbox/images/app-information.png similarity index 100% rename from 04_gettingstarted/02_sandbox/images/app-information.png rename to gettingstarted/sandbox/images/app-information.png diff --git a/04_gettingstarted/02_sandbox/images/review-confirm.png b/gettingstarted/sandbox/images/review-confirm.png similarity index 100% rename from 04_gettingstarted/02_sandbox/images/review-confirm.png rename to gettingstarted/sandbox/images/review-confirm.png diff --git a/04_gettingstarted/02_sandbox/images/usage-mode.png b/gettingstarted/sandbox/images/usage-mode.png similarity index 100% rename from 04_gettingstarted/02_sandbox/images/usage-mode.png rename to gettingstarted/sandbox/images/usage-mode.png diff --git a/04_gettingstarted/02_sandbox/01_sandbox.md b/gettingstarted/sandbox/sandbox.md similarity index 75% rename from 04_gettingstarted/02_sandbox/01_sandbox.md rename to gettingstarted/sandbox/sandbox.md index f012397..9db68ab 100644 --- a/04_gettingstarted/02_sandbox/01_sandbox.md +++ b/gettingstarted/sandbox/sandbox.md @@ -1,7 +1,7 @@ --- title: Sandbox excerpt: In this section you will find how to use the Telefónica Open Gateway Sandbox environment to test the Open Gateway APIs without the need to subscribe to a Channel Partner. Your tests won't be charged and won't be suitable for going into a production stage, so it is a great chance to learn and prototype, as a previous step to go commercial. -category: 66840b9dac745a002559ffad +category: 66d5624a492663000f4ed527 --- Please note that the usage of credentials granted from our Sandbox might be subject to some limitations in order to let you test without the obligations of a commercial contract. The terms and conditions of our developer or partner programs will apply. @@ -21,7 +21,7 @@ Once you are approved in at least one of our programs and you log in to the priv Open Gateway APIs access is granted to applications, not developers, so every application can have limited access to the scope and for the purpose it needs. -[More information on Privacy](../../opengateway/privacy.md) +[More information on Privacy](../../about/privacy.md) Therefore the way to get credentials to test the APIs is to register an application in the Sandbox console. You will use your application credentials to authenticate your requests to the APIs from any test you code no matter if it is actually a comprehensive application or just a tiny script to run from the a command line interface. @@ -58,7 +58,7 @@ For every application you create, you will need to follow these simple steps to - **Name**: A name to identify your application by the operators as an Open Gateway APIs consumer. - **Full name**: Your application's commercial name by which operators can find it in your website or application stores. - **Description**: A brief description of your application's use case related to the usage of the APIs. - - **Redirect URL**: (Optional) For frontend triggered authorization flows, you must indicate an URI hosted on your servers for the flow to call back to your code for it to complete authorization and perform the service API request (check [frontend triggered authorization flow](/authentication/frontend.md) for detailed information). + - **Redirect URL**: (Optional) For frontend triggered authorization flows, you must indicate an URI hosted on your servers for the flow to call back to your code for it to complete authorization and perform the service API request (check [frontend triggered authorization flow](../../callflows/authorization/frontend.md) for detailed information). ![App information](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/app-information.png?raw=true) @@ -91,39 +91,18 @@ Note that if you selected the Production mode, you will have to wait for the app So far you have used the Sandbox console to register your application as the client to the APIs which means your application is the entity granted access with its credentials. -Now you will use such credentials to effectively consume de APIs from your code. You can use any programming language and any platform that supports HTTP requests, or you can use SDKs for convenience. The offering of SDKs in different programming languages depends on your Channel Partner of choice at the commercial stage. For testing purposes, our Open Gateway Sandbox provides you with a Python SDK and will publish SDK in other common languages soon. +Now you will use such credentials to effectively consume de APIs from your code. You can use any programming language and any platform that supports HTTP requests, or you can use the Sandbox SDK for convenience. Our Open Gateway Sandbox provides you with a Python SDK and will publish SDKs in other common languages soon. -### HTTP integration +[Check the pros and cons of using HTTP integration or SDKs to consume the APIs](../../callflows/apiintegration.md) -#### Pros and cons -- Pros: - - No dependencies on third-party libraries - - No need to learn a new SDK - - Portability across different Channel Partners (which provide their own SDKs) -- Cons: - - More low-level tasks to care about: encoding your credentials, calling authorization endpoints, handling tokens, etc. - - More difficult to implement - - More verbose code - - More error-prone code +When it comes to our Sandbox's SDK, the following particular considerations apply: +- Once you shift to a Channel Partner in a commercial stage, your production code will need to use their SDKs instead of the Sandbox's one you used for testing and prototyping or, in the worst case, you will have to use the HTTP integration method instead if no SDK is available for your app's language. +- Our Sandbox does not provide a fronted SDK, so if the use case you are prototyping triggers the authorization flow from the end-user device, you will need to implement it by coding HTTP integration. Once you progress to a production stage, you need to check your Channel Partner toolkit offering. #### API reference -You can check the OpenAPI v3 specification of each API in the [Open Gateway APIs](../../02_apis/01_apis.md) guide. +You can check the OpenAPI v3 specification of each API in the list of [Available APIs](../../catalog/available.md) or in the [API Roadmap](../../catalog/roadmap.md). -### Sandbox SDK +### Sandbox SDK reference -#### Pros and cons -- Pros: - - Low-level tasks are abstracted: you instantiate a class with your application credentials and the instance will handle authentication and token management for you - - Further features could be included by the Channel Partner in the SDK: for instance, frontend SDKs handling network interfaces to avoid authentication problems caused by end-user device being connected to Wi-Fi networks - - Less code to write - - Less error-prone code - - Easier to implement -- Cons: - - It is up to your Channel Partner to provide SDKs in different programming languages including your app's one. Once you shift to a Channel Partner, your production code will need to use their SDKs instead of the Sandbox's one you used for testing and prototyping or, in the worst case, you will have to use the HTTP integration method instead if no SDK is available for your app's language. - - Our Sandbox does not provide a fronted SDK, so if the use case you are prototyping triggers the authorization flow from the end-user device, you will need to implement it by coding HTTP integration. Once you progress to a production stage, you need to check your Channel Partner toolkit offering. - - Consequently to the above, once in a production stage, you will less portability across different Channel Partners - -#### SDK reference - -You can check the reference of the current Sandbox SDK reference in the [Python Sandbox SDK](02_sdkreference.md) guide. The scope of the APIs covered and the programming languages supported will be extended progressively according to the Sandbox roadmap. +You can check the reference of the current Sandbox SDK reference in the [Python Sandbox SDK](./sdkreference.md) guide. The scope of the APIs covered and the programming languages supported will be extended progressively according to the Sandbox roadmap. diff --git a/04_gettingstarted/02_sandbox/02_sdkreference.md b/gettingstarted/sandbox/sdkreference.md similarity index 84% rename from 04_gettingstarted/02_sandbox/02_sdkreference.md rename to gettingstarted/sandbox/sdkreference.md index b9b826a..a0166ae 100644 --- a/04_gettingstarted/02_sandbox/02_sdkreference.md +++ b/gettingstarted/sandbox/sdkreference.md @@ -1,7 +1,7 @@ --- title: Sandbox Python SDK reference excerpt: Reference guide to the Sandbox Python SDK on how to authorize, instantiate and use its service classes to access the Open Gateway APIs. -category: 66840b9dac745a002559ffad +category: 66d5624a492663000f4ed527 --- (WIP) From 15207c6f44a9215459b86e05be47dead97ffe99b Mon Sep 17 00:00:00 2001 From: mtnieto Date: Wed, 4 Sep 2024 10:38:41 +0200 Subject: [PATCH 5/9] modified sandbox info --- gettingstarted/sandbox/01_introsandbox.md | 32 ------- gettingstarted/sandbox/03_sdkreference.md | 7 -- gettingstarted/sandbox/sandbox.md | 96 ++----------------- .../{02_usethesandbox.md => usethesandbox.md} | 58 ++++------- 4 files changed, 24 insertions(+), 169 deletions(-) delete mode 100644 gettingstarted/sandbox/01_introsandbox.md delete mode 100644 gettingstarted/sandbox/03_sdkreference.md rename gettingstarted/sandbox/{02_usethesandbox.md => usethesandbox.md} (66%) diff --git a/gettingstarted/sandbox/01_introsandbox.md b/gettingstarted/sandbox/01_introsandbox.md deleted file mode 100644 index 736010c..0000000 --- a/gettingstarted/sandbox/01_introsandbox.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Sandbox -excerpt: In this section you will know what is the Telefónica Open Gateway Sandbox environment to test the Open Gateway APIs without the need to subscribe to a Channel Partner. Your tests won't be charged and won't be suitable for going into a production stage, so it is a great chance to learn and prototype, as a previous step to go commercial. -category: 66840b9dac745a002559ffad ---- - - -The Sandbox in Open Gateway is a secure and free testing environment that allows developers to experiment with Open Gateway APIs without any risk to live systems. This isolated space is designed to help developers validate their applications, ensuring they work as intended before deployment. By providing access to all the necessary tools and resources, the Sandbox allows developers to simulate real-world scenarios and thoroughly test API integrations. - -One of the key advantages of the Open Gateway Sandbox is its ability to offer a risk-free environment where developers can troubleshoot issues, refine their code, and optimize performance without impacting actual data or services. This ensures that any potential bugs or errors are identified and resolved early in the development process, leading to more reliable and secure applications when they go live. - -Additionally, the free access to the Sandbox makes it an invaluable resource for developers, especially those working on tight budgets or within smaller teams. It provides all the benefits of a robust testing environment without the associated costs, allowing developers to focus on creating high-quality applications. By using the Sandbox, developers can ensure that their solutions are fully functional, secure, and optimized, paving the way for a smoother and more successful deployment. -Please note that the usage of credentials granted from our Sandbox might be subject to some limitations in order to let you test without the obligations of a commercial contract. The terms and conditions of our developer or partner programs will apply. - -## Getting onboarded - -The only requirement to start using the Open Gateway Sandbox is to join one of our programs. Please check which one best fit your needs. You can also request to join both: - -- [Open Gateway Developer Hub](https://opengateway.telefonica.com/en/developer-hub) -- [Open Gateway Partner Program](https://opengateway.telefonica.com/en/partner-program) - -Once you are approved in at least one of our programs and you log in to the private area of the Telefónica Open Gateway website, you already have access to the Sandbox web console as a program member from the Technical Toolbox section. - -![Access to the Sandbox console from the website private area](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/access.png?raw=true) - -## How to use the Sandbox - -Discover how to utilize the Open Gateway Sandbox, a no-cost, secure space for testing and perfecting your applications with realistic API scenarios prior to going live. [Our detailed guide](02_usethesandbox.md) will help you optimize your development workflow and ensure a seamless deployment. - -## SDK reference - -You can check the reference of the current Sandbox SDK reference in the [Python Sandbox SDK](03_sdkreference.md) guide. The scope of the APIs covered and the programming languages supported will be extended progressively according to the Sandbox roadmap. diff --git a/gettingstarted/sandbox/03_sdkreference.md b/gettingstarted/sandbox/03_sdkreference.md deleted file mode 100644 index b9b826a..0000000 --- a/gettingstarted/sandbox/03_sdkreference.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Sandbox Python SDK reference -excerpt: Reference guide to the Sandbox Python SDK on how to authorize, instantiate and use its service classes to access the Open Gateway APIs. -category: 66840b9dac745a002559ffad ---- - -(WIP) diff --git a/gettingstarted/sandbox/sandbox.md b/gettingstarted/sandbox/sandbox.md index 04c5c12..66904db 100644 --- a/gettingstarted/sandbox/sandbox.md +++ b/gettingstarted/sandbox/sandbox.md @@ -3,6 +3,12 @@ title: 🧪 Sandbox excerpt: In this section you will find how to use the Telefónica Open Gateway Sandbox environment to test the Open Gateway APIs without the need to subscribe to a Channel Partner. Your tests won't be charged and won't be suitable for going into a production stage, so it is a great chance to learn and prototype, as a previous step to go commercial. category: 66d5624a492663000f4ed527 --- +The Sandbox in Open Gateway is a secure and free testing environment that allows developers to experiment with Open Gateway APIs without any risk to live systems. This isolated space is designed to help developers validate their applications, ensuring they work as intended before deployment. By providing access to all the necessary tools and resources, the Sandbox allows developers to simulate real-world scenarios and thoroughly test API integrations. + +One of the key advantages of the Open Gateway Sandbox is its ability to offer a risk-free environment where developers can troubleshoot issues, refine their code, and optimize performance without impacting actual data or services. This ensures that any potential bugs or errors are identified and resolved early in the development process, leading to more reliable and secure applications when they go live. + +Additionally, the free access to the Sandbox makes it an invaluable resource for developers, especially those working on tight budgets or within smaller teams. It provides all the benefits of a robust testing environment without the associated costs, allowing developers to focus on creating high-quality applications. By using the Sandbox, developers can ensure that their solutions are fully functional, secure, and optimized, paving the way for a smoother and more successful deployment. +Please note that the usage of credentials granted from our Sandbox might be subject to some limitations in order to let you test without the obligations of a commercial contract. The terms and conditions of our developer or partner programs will apply. Please note that the usage of credentials granted from our Sandbox might be subject to some limitations in order to let you test without the obligations of a commercial contract. The terms and conditions of our developer or partner programs will apply. @@ -16,93 +22,3 @@ The only requirement to start using the Open Gateway Sandbox is to join one of o Once you are approved in at least one of our programs and you log in to the private area of the Telefónica Open Gateway website, you already have access to the Sandbox web console as a program member from the Technical Toolbox section. ![Access to the Sandbox console from the website private area](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/access.png?raw=true) - -## Registering your application - -Open Gateway APIs access is granted to applications, not developers, so every application can have limited access to the scope and for the purpose it needs. - -[More information on Privacy](/docs/privacy) - -Therefore the way to get credentials to test the APIs is to register an application in the Sandbox console. You will use your application credentials to authenticate your requests to the APIs from any test you code no matter if it is actually a comprehensive application or just a tiny script to run from the a command line interface. - -For every application you create, you will need to follow these simple steps to configure it: - -1. Select the APIs you want your application to test. It could be one or several APIs depending on your use case. - -![API selection](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/api-selection.png?raw=true) - -2. Select the usage mode for your application. You have the following options: - - - **Production mode** - - Although our Sandbox is not a Channel Partner's production environment but a testing environment instead, it can route your API calls to our mobile operators to provide a real response if you test your prototype application from a device connected to one of their networks. That requires that you are the mobile line holder and have the SIM card installed in such device. - - Movistar (Spain) is already available for testing from the Telefónica Open Gateway Sandbox, and other Telefónica operators in other countries will be added soon. - - The production mode is disabled by default for Privacy reasons, but you can enable it by filling in your legal information and accepting the terms and conditions in the form that the Sandbox console will offer you for that purpose. You will have to provide some mobile phone numbers of your own which will be added to a whitelist that will allow you to test the APIs in production mode from your own devices and will block API usage accessing someone else's personal data. - - - **Mock mode** - - You can test your application without the need to have a SIM card from one of our mobile operators. The Sandbox will provide you with a mock response for every API call you make. - - The mock mode will also make available for you some APIs that are not still commercially available on our mobile operators, so you can test them in advance. - -![Usage mode](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/usage-mode.png?raw=true) - -3. Briefly describe your application as part of the application onboarding process so that mobile operators can understand the purpose of your tests and validate it. - - Since it is a testing environment, your application won't be rejected as per this information, but our Sandbox uses standard procedures to register applications in the mobile operators' systems which takes this data as mandatory. - - These are the fields you need to fill in: - - - **Name**: A name to identify your application by the operators as an Open Gateway APIs consumer. - - **Full name**: Your application's commercial name by which operators can find it in your website or application stores. - - **Description**: A brief description of your application's use case related to the usage of the APIs. - - **Redirect URL**: (Optional) For frontend triggered authorization flows, you must indicate an URI hosted on your servers for the flow to call back to your code for it to complete authorization and perform the service API request (check [frontend triggered authorization flow](/docs/frontend) for detailed information). - -![App information](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/app-information.png?raw=true) - -4. Check the specifications and accept the terms and conditions per API and operator. - - Each mobile operator has its own terms and conditions for the usage of each API, and its own technical specifications you will want to consider when it comes to consuming them, so you will need to accept them for each API you want to test on each operator you have previously selected. - - Since our Sandbox is just a free testing environment, specifications are not binding and conditions are meant for safeguarding privacy, even given that only whitelisted phone numbers can be used when testing in the Production mode with our mobile operators. In the case of the Mock mode, a global simulated operator will provide you with mock responses being the terms and conditions of the program you are member to that applies. - -![Check specifications and conditions per API and operator](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/app-configuration.png?raw=true) - -5. Review the summary and confirm - -![Review the summary and confirm](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/review-confirm.png?raw=true) - -6. Once you have confirmed, your application is granted access to the Sandbox API gateway with its credentials. - -![alt text](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/app-created.png?raw=true) - -To get your application credentials and use them in your prototype, go to the application details page on the My Apps section, where you will find the following information: - -- **Client ID**: A unique identifier for your application. -- **Client Secret**: A secret key to authenticate your application to the APIs. - -![alt text](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/app-credentials.png?raw=true) - -Note that if you selected the Production mode, you will have to wait for the approval of your application by the mobile operators you selected. When your application status is "Completed" you are good to test the APIs with your applications's credentials no matter what end-user phone number you are using. If you only selected the Mock mode, you can start testing right away. - -## Using the APIs - -So far you have used the Sandbox console to register your application as the client to the APIs which means your application is the entity granted access with its credentials. - -Now you will use such credentials to effectively consume de APIs from your code. You can use any programming language and any platform that supports HTTP requests, or you can use the Sandbox SDK for convenience. Our Open Gateway Sandbox provides you with a Python SDK and will publish SDKs in other common languages soon. - -[Check the pros and cons of using HTTP integration or SDKs to consume the APIs](/docs/apiintegration) - -When it comes to our Sandbox's SDK, the following particular considerations apply: -- Once you shift to a Channel Partner in a commercial stage, your production code will need to use their SDKs instead of the Sandbox's one you used for testing and prototyping or, in the worst case, you will have to use the HTTP integration method instead if no SDK is available for your app's language. -- Our Sandbox does not provide a fronted SDK, so if the use case you are prototyping triggers the authorization flow from the end-user device, you will need to implement it by coding HTTP integration. Once you progress to a production stage, you need to check your Channel Partner toolkit offering. - -#### API reference - -You can check the OpenAPI v3 specification of each API in the list of [Available APIs](/docs/available) or in the [API Roadmap](/docs/roadmap). - -### Sandbox SDK reference - -You can check the reference of the current Sandbox SDK reference in the [Python Sandbox SDK](./sdkreference.md) guide. The scope of the APIs covered and the programming languages supported will be extended progressively according to the Sandbox roadmap. diff --git a/gettingstarted/sandbox/02_usethesandbox.md b/gettingstarted/sandbox/usethesandbox.md similarity index 66% rename from gettingstarted/sandbox/02_usethesandbox.md rename to gettingstarted/sandbox/usethesandbox.md index 7318889..eff27ea 100644 --- a/gettingstarted/sandbox/02_usethesandbox.md +++ b/gettingstarted/sandbox/usethesandbox.md @@ -1,15 +1,14 @@ --- title: How to use the Sandbox excerpt: Learn how to effectively use the Open Gateway Sandbox, a free and secure environment for testing and refining your applications with real-world API scenarios before deployment. Follow our step-by-step guide to maximize your development process and ensure a smooth transition to production. -category: 66840b9dac745a002559ffad +category: 66d5624a492663000f4ed527 --- - ## Registering your application Open Gateway APIs access is granted to applications, not developers, so every application can have limited access to the scope and for the purpose it needs. -[More information on Privacy](../../opengateway/privacy.md) +[More information on Privacy](/docs/privacy) Therefore the way to get credentials to test the APIs is to register an application in the Sandbox console. You will use your application credentials to authenticate your requests to the APIs from any test you code no matter if it is actually a comprehensive application or just a tiny script to run from the a command line interface. @@ -17,7 +16,7 @@ For every application you create, you will need to follow these simple steps to 1. Select the APIs you want your application to test. It could be one or several APIs depending on your use case. -![API selection](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/api-selection.png?raw=true) +![API selection](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/api-selection.png?raw=true) 2. Select the usage mode for your application. You have the following options: @@ -35,7 +34,7 @@ For every application you create, you will need to follow these simple steps to The mock mode will also make available for you some APIs that are not still commercially available on our mobile operators, so you can test them in advance. -![Usage mode](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/usage-mode.png?raw=true) +![Usage mode](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/usage-mode.png?raw=true) 3. Briefly describe your application as part of the application onboarding process so that mobile operators can understand the purpose of your tests and validate it. @@ -46,9 +45,9 @@ For every application you create, you will need to follow these simple steps to - **Name**: A name to identify your application by the operators as an Open Gateway APIs consumer. - **Full name**: Your application's commercial name by which operators can find it in your website or application stores. - **Description**: A brief description of your application's use case related to the usage of the APIs. - - **Redirect URL**: (Optional) For frontend triggered authorization flows, you must indicate an URI hosted on your servers for the flow to call back to your code for it to complete authorization and perform the service API request (check [frontend triggered authorization flow](/authentication/frontend.md) for detailed information). + - **Redirect URL**: (Optional) For frontend triggered authorization flows, you must indicate an URI hosted on your servers for the flow to call back to your code for it to complete authorization and perform the service API request (check [frontend triggered authorization flow](/docs/frontend) for detailed information). -![App information](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/app-information.png?raw=true) +![App information](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/app-information.png?raw=true) 4. Check the specifications and accept the terms and conditions per API and operator. @@ -56,22 +55,22 @@ For every application you create, you will need to follow these simple steps to Since our Sandbox is just a free testing environment, specifications are not binding and conditions are meant for safeguarding privacy, even given that only whitelisted phone numbers can be used when testing in the Production mode with our mobile operators. In the case of the Mock mode, a global simulated operator will provide you with mock responses being the terms and conditions of the program you are member to that applies. -![Check specifications and conditions per API and operator](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/app-configuration.png?raw=true) +![Check specifications and conditions per API and operator](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/app-configuration.png?raw=true) 5. Review the summary and confirm -![Review the summary and confirm](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/review-confirm.png?raw=true) +![Review the summary and confirm](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/review-confirm.png?raw=true) 6. Once you have confirmed, your application is granted access to the Sandbox API gateway with its credentials. -![alt text](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/app-created.png?raw=true) +![alt text](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/app-created.png?raw=true) To get your application credentials and use them in your prototype, go to the application details page on the My Apps section, where you will find the following information: - **Client ID**: A unique identifier for your application. - **Client Secret**: A secret key to authenticate your application to the APIs. -![alt text](https://github.com/Telefonica/opengateway-developers-website/raw/main/04_gettingstarted/02_sandbox/images/app-credentials.png?raw=true) +![alt text](https://github.com/Telefonica/opengateway-developers-website/raw/main/gettingstarted/sandbox/images/app-credentials.png?raw=true) Note that if you selected the Production mode, you will have to wait for the approval of your application by the mobile operators you selected. When your application status is "Completed" you are good to test the APIs with your applications's credentials no matter what end-user phone number you are using. If you only selected the Mock mode, you can start testing right away. @@ -79,39 +78,18 @@ Note that if you selected the Production mode, you will have to wait for the app So far you have used the Sandbox console to register your application as the client to the APIs which means your application is the entity granted access with its credentials. -Now you will use such credentials to effectively consume de APIs from your code. You can use any programming language and any platform that supports HTTP requests, or you can use SDKs for convenience. The offering of SDKs in different programming languages depends on your Channel Partner of choice at the commercial stage. For testing purposes, our Open Gateway Sandbox provides you with a Python SDK and will publish SDK in other common languages soon. +Now you will use such credentials to effectively consume de APIs from your code. You can use any programming language and any platform that supports HTTP requests, or you can use the Sandbox SDK for convenience. Our Open Gateway Sandbox provides you with a Python SDK and will publish SDKs in other common languages soon. -### HTTP integration +[Check the pros and cons of using HTTP integration or SDKs to consume the APIs](/docs/apiintegration) -#### Pros and cons -- Pros: - - No dependencies on third-party libraries - - No need to learn a new SDK - - Portability across different Channel Partners (which provide their own SDKs) -- Cons: - - More low-level tasks to care about: encoding your credentials, calling authorization endpoints, handling tokens, etc. - - More difficult to implement - - More verbose code - - More error-prone code +When it comes to our Sandbox's SDK, the following particular considerations apply: +- Once you shift to a Channel Partner in a commercial stage, your production code will need to use their SDKs instead of the Sandbox's one you used for testing and prototyping or, in the worst case, you will have to use the HTTP integration method instead if no SDK is available for your app's language. +- Our Sandbox does not provide a fronted SDK, so if the use case you are prototyping triggers the authorization flow from the end-user device, you will need to implement it by coding HTTP integration. Once you progress to a production stage, you need to check your Channel Partner toolkit offering. #### API reference -You can check the OpenAPI v3 specification of each API in the [Open Gateway APIs](../../02_apis/01_apis.md) guide. - -### Sandbox SDK - -#### Pros and cons -- Pros: - - Low-level tasks are abstracted: you instantiate a class with your application credentials and the instance will handle authentication and token management for you - - Further features could be included by the Channel Partner in the SDK: for instance, frontend SDKs handling network interfaces to avoid authentication problems caused by end-user device being connected to Wi-Fi networks - - Less code to write - - Less error-prone code - - Easier to implement -- Cons: - - It is up to your Channel Partner to provide SDKs in different programming languages including your app's one. Once you shift to a Channel Partner, your production code will need to use their SDKs instead of the Sandbox's one you used for testing and prototyping or, in the worst case, you will have to use the HTTP integration method instead if no SDK is available for your app's language. - - Our Sandbox does not provide a fronted SDK, so if the use case you are prototyping triggers the authorization flow from the end-user device, you will need to implement it by coding HTTP integration. Once you progress to a production stage, you need to check your Channel Partner toolkit offering. - - Consequently to the above, once in a production stage, you will less portability across different Channel Partners +You can check the OpenAPI v3 specification of each API in the list of [Available APIs](/docs/available) or in the [API Roadmap](/docs/roadmap). -#### SDK reference +### Sandbox SDK reference -You can check the reference of the current Sandbox SDK reference in the [Python Sandbox SDK](02_sdkreference.md) guide. The scope of the APIs covered and the programming languages supported will be extended progressively according to the Sandbox roadmap. +You can check the reference of the current Sandbox SDK reference in the [Python Sandbox SDK](./sdkreference.md) guide. The scope of the APIs covered and the programming languages supported will be extended progressively according to the Sandbox roadmap. From ae6a522b4d91043d97b00cabbad76c26312119fb Mon Sep 17 00:00:00 2001 From: mtnieto Date: Wed, 4 Sep 2024 11:12:48 +0200 Subject: [PATCH 6/9] privacy first draft --- about/privacy.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/about/privacy.md b/about/privacy.md index 3968fd5..683774b 100644 --- a/about/privacy.md +++ b/about/privacy.md @@ -4,4 +4,25 @@ excerpt: Open Gateway as an industry initiative has been designed with end-user' category: 66840b9dac745a002559ffad --- -# Privacy at Open Gateway \ No newline at end of file +# Privacy at Open Gateway + +Several Open Gateway APIs allow developers or applications to access and utilize personal information or data. "Utilizing" personal data encompasses any form of handling or processing related to an identified or identifiable individual, including merely viewing the data. Consequently, the use of personal data must be justified and authorized. + +To manage access to personal data, **consuming an Open Gateway API requires the use of an access token**. This mechanism ensures that the consuming application securely accesses the data exposed by the API and accurately identifies the specific data being accessed. + +The access token allows to track the data consumption, ensure the proper privacy management (e.g., validating if the customer has rights to access) and gives the possibility to directly provide subscribers control over the access to their data, enabling consent capture/revoking mechanisms. + +That is why the developer/application shall first request a valid access token that identifies: +- Data (what) that is going to be accessed. +- Purpose (for what), reason why the data is going to be accessed. +- 3-legged identification of the parties interacting: + - Data consumer: Application. + - Data provider: Operator. + - Data owner/origin: Network Subscriber + +Legitimizing the access to personal data can imply multiple procedures, that shall be validated by the operator during the access token retrieval. There are two options: explicit consent and legitimate interest. + +For the first one, **explicit consent**, the capture procedure of such consent may be launched during the token +creation, ensuring that the subscriber/user is identified and can clearly confirm or reject the access to the data + +In the case **legitimate interest** applies to this API, this is a decision to be taken by the Telco Operator according to its legal/privacy assessment in the context of the country or region where it is operating. A Legitimate Interest lawful basis does not require explicit consent, but it may be necessary to inform the subscriber about the usage of their location information, and a way for the subscriber to revoke that usage may also be needed. Finally, the Telco Operator may have to implement the proper channels and procedures to manage the lawful basis by its subscribers. \ No newline at end of file From 3b626484e35a605374e203656914e96c5e2c3689 Mon Sep 17 00:00:00 2001 From: mtnieto Date: Wed, 4 Sep 2024 13:13:27 +0200 Subject: [PATCH 7/9] device location main page and updated sim swap --- catalog/devicelocation/devicelocation.md | 30 ++++++++++++++++++++++++ catalog/simswap/simswap.md | 22 ----------------- 2 files changed, 30 insertions(+), 22 deletions(-) create mode 100644 catalog/devicelocation/devicelocation.md diff --git a/catalog/devicelocation/devicelocation.md b/catalog/devicelocation/devicelocation.md new file mode 100644 index 0000000..da6b500 --- /dev/null +++ b/catalog/devicelocation/devicelocation.md @@ -0,0 +1,30 @@ +--- +title: Device Location API +excerpt: The Device Location API from Open Gateway allows to check if a mobile phone is in a determined location. +category: 66aa4f941e51e7000fa353ce +--- + + +The Device Location API is a software interface that allows applications to confirm if a user's device is in its intended location. The network must track a device's location at all times to effectively provide telecommunications services. This capability is utilized to offer device location as a service. + +The Device Location API enhances security by verifying that a device is in the expected location during transactions, which helps prevent fraud and unauthorized activities. This verification process also streamlines authentication, leading to faster and smoother transactions, ultimately improving the user experience. + +Additionally, the API is a valuable tool for fraud prevention, as it can quickly detect and mitigate potential threats by identifying discrepancies between the claimed and actual device locations. It also helps businesses comply with regulatory requirements in industries where location verification is essential, such as finance and gaming. + +Furthermore, by knowing a user's location, businesses can offer more personalized and context-aware services, increasing customer engagement and satisfaction. The API's versatility makes it applicable across various industries, including retail, telecom, and logistics. For merchants, it also contributes to reducing chargebacks by verifying the location of a device during transactions. + + +## Overview of the SIM Swap CAMARA API + +### High level definition + +The Device Location CAMARA API is a software interface that allows applications to confirm if a user’s device is in the expected location. For the network to deliver its telecommunications services effectively, it must be able to locate a device at any time. This capability is thus utilized to provide device location as a service. + +### API Operations + +The Device Location Camara API specifies one operation: + +- **POST /verify**: answers the question ‘is the device in the circle determined by a center (latitude and longitude) and an accuracy (given in km as the radius of the circle)?’ + +[Check the API Reference](/reference/retrievedevicelocation) + diff --git a/catalog/simswap/simswap.md b/catalog/simswap/simswap.md index a7a852a..a3cba29 100644 --- a/catalog/simswap/simswap.md +++ b/catalog/simswap/simswap.md @@ -54,25 +54,3 @@ To safeguard against SIM swap fraud, it is crucial to be aware of how your perso By understanding the mechanics of SIM swap fraud and taking proactive steps to protect your accounts, you can significantly reduce the risk of falling victim to this type of cybercrime. - -# Overview of the SIM Swap CAMARA API - -## High level definition of the SIM Swap CAMARA API - -The SIM Swap CAMARA API is a software interface that enables applications to request the last date of a SIM swap performed on a mobile line or to check whether a SIM swap has been performed during a specified period. This functionality is provided in an easy and secure manner, allowing real-time verification of the activation date of a SIM card on the mobile network. - -### API Operations - -The SIM Swap CAMARA API specifies the following two operations: - -- **POST retrieve-date:** Answers the question ‘when did the last SIM swap occur?’. This operation requires the phone number to be checked (parameter `phoneNumber`). - -- **POST check:** Checks whether a SIM swap occurred during the last N hours. This operation requires the following inputs: - - `phoneNumber`: The phone number to be checked. - - `maxAge`: The period in hours to be checked for a SIM swap (minimum 1 hour, maximum 2400 hours, default 240 hours). - -With the SIM Swap CAMARA API, any digital service provider can integrate the functionality of checking changes in SIM renewals directly into their software. This can be done both alone and in combination with other external inputs. Additionally, they can combine other Open Gateway APIs related to anti-fraud measures that may be of interest. - -Aggregators play a crucial role in the anti-fraud industry. They can integrate this functionality into their software and build more sophisticated algorithms by combining other security checks, such as location verification, phone number verification, matching of contact information, external data sources, AI algorithms, etc. To achieve this, aggregators can use other Open Gateway APIs like Device Location Verification, Number Verification, or KYC-Match. - -By using the SIM Swap CAMARA API, developers can significantly enhance the security and reliability of their applications, providing a robust defense against SIM swap fraud. From af42837c2245e895bfa510e7a45dcda18483be9f Mon Sep 17 00:00:00 2001 From: mtnieto Date: Wed, 4 Sep 2024 13:52:19 +0200 Subject: [PATCH 8/9] changed architecture image --- about/images/architecture.png | Bin 76567 -> 176219 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/about/images/architecture.png b/about/images/architecture.png index 2d6de60626a5921c24ceb16438bb378733ec8abd..9e88bf5e2ab4d13b539674595478b28a4c22c737 100644 GIT binary patch literal 176219 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 Date: Wed, 4 Sep 2024 17:15:29 +0200 Subject: [PATCH 9/9] device status --- .../devicelocation_openapi.yaml | 0 catalog/devicestatus/devicestatus.md | 29 +++++++++++++++++++ .../devicestatus_openapi.yaml | 0 3 files changed, 29 insertions(+) rename catalog/{ => devicelocation}/devicelocation_openapi.yaml (100%) create mode 100644 catalog/devicestatus/devicestatus.md rename catalog/{ => devicestatus}/devicestatus_openapi.yaml (100%) diff --git a/catalog/devicelocation_openapi.yaml b/catalog/devicelocation/devicelocation_openapi.yaml similarity index 100% rename from catalog/devicelocation_openapi.yaml rename to catalog/devicelocation/devicelocation_openapi.yaml diff --git a/catalog/devicestatus/devicestatus.md b/catalog/devicestatus/devicestatus.md new file mode 100644 index 0000000..829562b --- /dev/null +++ b/catalog/devicestatus/devicestatus.md @@ -0,0 +1,29 @@ +--- +title: Device Status API +excerpt: The Device Status API makes it possible to check the roaming status of a specific SIM-based device by using events from the operators' network. +category: 66aa4f941e51e7000fa353ce +--- + +The Device Location API is a software interface that allows applications to confirm if a user's device is in its intended location. The network must track a device's location at all times to effectively provide telecommunications services. This capability is utilized to offer device location as a service. + +The Device Location API enhances security by verifying that a device is in the expected location during transactions, which helps prevent fraud and unauthorized activities. This verification process also streamlines authentication, leading to faster and smoother transactions, ultimately improving the user experience. + +Additionally, the API is a valuable tool for fraud prevention, as it can quickly detect and mitigate potential threats by identifying discrepancies between the claimed and actual device locations. It also helps businesses comply with regulatory requirements in industries where location verification is essential, such as finance and gaming. + +Furthermore, by knowing a user's location, businesses can offer more personalized and context-aware services, increasing customer engagement and satisfaction. The API's versatility makes it applicable across various industries, including retail, telecom, and logistics. For merchants, it also contributes to reducing chargebacks by verifying the location of a device during transactions. + + +## Overview of the SIM Swap CAMARA API + +### High level definition + +The Device Status CAMARA API is a software interface that enables a requester to provide a mobile device identifier (such as MSISDN, IP, or an external identifier) and receive a response indicating whether the device is currently in roaming status. + +### API Operations + +The Device Status Camara API specifies one operation: + +- **POST /roaming**: answers the question 'is the device in roaming?' + +[Check the API Reference](/reference/devicestatus) + diff --git a/catalog/devicestatus_openapi.yaml b/catalog/devicestatus/devicestatus_openapi.yaml similarity index 100% rename from catalog/devicestatus_openapi.yaml rename to catalog/devicestatus/devicestatus_openapi.yaml