openapi: 3.0.3 info: title: Culqi API v2 3DS Plans API description: Culqi is a Peruvian online payments platform (a Grupo Credicorp / Krealo company) that lets businesses accept card, Yape, PagoEfectivo, mobile wallet and Cuotealo (installment) payments. The REST API v2 exposes tokenization, charges (cargos), orders, refunds, customers, cards, plans, subscriptions, webhook events, card-BIN (iin) lookup and transfers. Card data is tokenized client-side against the PCI-scoped secure host; all money-movement and management operations run against the server host with a secret key. Amounts are integers in the currency minor unit (cents); supported currencies are PEN (Peruvian Sol) and USD. termsOfService: https://culqi.com/terminos_y_condiciones/ contact: name: Culqi Developer Support url: https://docs.culqi.com/ version: '2.0' servers: - url: https://api.culqi.com/v2 description: Server-side host for charges, orders, refunds, customers, cards, plans, subscriptions, events, iins and transfers (authenticated with a secret key, sk_). - url: https://secure.culqi.com/v2 description: PCI-scoped host for card tokenization and 3DS charge confirmation (authenticated with a public key, pk_). tags: - name: Plans description: Recurring-billing plan definitions. paths: /plans: post: operationId: createPlan tags: - Plans summary: Create a plan description: Defines a recurring-billing plan (interval, amount, currency, limit). security: - secretKey: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreatePlanRequest' responses: '201': description: Plan created content: application/json: schema: $ref: '#/components/schemas/Plan' '400': $ref: '#/components/responses/Error' get: operationId: listPlans tags: - Plans summary: List plans security: - secretKey: [] parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Before' - $ref: '#/components/parameters/After' responses: '200': description: A paginated list of plans content: application/json: schema: $ref: '#/components/schemas/PlanList' /plans/{id}: parameters: - $ref: '#/components/parameters/ResourceId' get: operationId: getPlan tags: - Plans summary: Retrieve a plan security: - secretKey: [] responses: '200': description: Plan object content: application/json: schema: $ref: '#/components/schemas/Plan' '404': $ref: '#/components/responses/Error' patch: operationId: updatePlan tags: - Plans summary: Update a plan security: - secretKey: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MetadataUpdate' responses: '200': description: Updated plan content: application/json: schema: $ref: '#/components/schemas/Plan' delete: operationId: deletePlan tags: - Plans summary: Delete a plan security: - secretKey: [] responses: '200': description: Deletion result content: application/json: schema: $ref: '#/components/schemas/Deleted' components: parameters: ResourceId: name: id in: path required: true description: The unique resource identifier. schema: type: string Limit: name: limit in: query required: false description: Number of records to return (max 100). schema: type: integer default: 10 maximum: 100 Before: name: before in: query required: false description: Cursor - return records created before this id. schema: type: string After: name: after in: query required: false description: Cursor - return records created after this id. schema: type: string schemas: Metadata: type: object description: Arbitrary key/value metadata attached to a resource. additionalProperties: type: string CreatePlanRequest: type: object required: - name - amount - currency_code - interval_unit_time - interval_count properties: name: type: string amount: type: integer currency_code: $ref: '#/components/schemas/CurrencyCode' interval_unit_time: type: integer description: Interval unit (e.g. 1=daily, 2=weekly, 3=monthly, 4=yearly). interval_count: type: integer description: Number of intervals between charges. limit: type: integer description: Maximum number of charges (0 = unlimited). metadata: $ref: '#/components/schemas/Metadata' CurrencyCode: type: string description: ISO currency code. Culqi supports PEN and USD. enum: - PEN - USD MetadataUpdate: type: object properties: metadata: $ref: '#/components/schemas/Metadata' PlanList: $ref: '#/components/schemas/PaginatedList' PaginatedList: type: object properties: object: type: string example: list data: type: array items: type: object additionalProperties: true paging: type: object properties: previous: type: string nullable: true next: type: string nullable: true cursors: type: object properties: before: type: string nullable: true after: type: string nullable: true Deleted: type: object properties: deleted: type: boolean id: type: string merchant_message: type: string Error: type: object properties: object: type: string example: error type: type: string example: card_error merchant_message: type: string user_message: type: string param: type: string code: type: string Plan: type: object properties: object: type: string example: plan id: type: string example: pln_test_xxxxxxxxxxxx name: type: string amount: type: integer currency_code: $ref: '#/components/schemas/CurrencyCode' interval_unit_time: type: integer interval_count: type: integer creation_date: type: integer metadata: $ref: '#/components/schemas/Metadata' responses: Error: description: Error response content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: secretKey: type: http scheme: bearer bearerFormat: sk_live_/sk_test_ secret key description: 'Server-side secret key sent as an HTTP Bearer token in the Authorization header, e.g. `Authorization: Bearer sk_live_...`.' publicKey: type: http scheme: bearer bearerFormat: pk_live_/pk_test_ public key description: 'Public key sent as an HTTP Bearer token for tokenization and 3DS confirm on the secure host, e.g. `Authorization: Bearer pk_live_...`.'