From c01c6876f25cadf01ea9bd194fdca6cc66fd015b Mon Sep 17 00:00:00 2001 From: Alex Varchuk Date: Thu, 23 Oct 2025 13:52:26 +0200 Subject: [PATCH] feat: initialize release candidate for v3.0.0 Co-authored-by: Roman Hotsiy Co-authored-by: Alex Varchuk Co-authored-by: Oprysk Vyacheslav Co-authored-by: Ivan Kropyvnytskyi <130547411+ivankropyvnytskyi@users.noreply.github.com> Co-authored-by: Yevhen Pylyp Co-authored-by: Vladyslav Makarenko Co-authored-by: Yevhenii Medviediev Co-authored-by: Oleksii Horbachevskyi Co-authored-by: volodymyr-rutskyi Co-authored-by: Adam Altman Co-authored-by: Andrew Tatomyr Co-authored-by: Anastasiia Derymarko Co-authored-by: Roman Marshevskyy Co-authored-by: Lorna Mitchell Co-authored-by: Taylor Krusen --- .changeset/config.json | 10 + .dockerignore | 12 +- .editorconfig | 10 - .eslintrc.js | 54 - .github/CODEOWNERS | 3 +- .github/CONTRIBUTING.md | 44 +- .github/ISSUE_TEMPLATE/bug_report.md | 6 +- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- .../actions/get-package-version/action.yml | 14 + .github/actions/setup-node/action.yml | 21 + .github/actions/setup-playwright/action.yml | 36 + .github/pull_request_template.md | 2 +- .github/styles/Rules/BritishEnglish.yml | 110 - .github/styles/Rules/FutureTense.yml | 10 - .github/styles/Rules/HeaderGerunds.yml | 11 - .../styles/Rules/InclusionGenderCulture.yml | 16 - .github/styles/Rules/OxfordComma.yml | 8 - .../config/vocabularies/Rules/accept.txt | 150 - .../config/vocabularies/Rules/reject.txt | 0 .github/workflows/docker.yml | 48 + .github/workflows/docs-tests.yaml | 37 - .github/workflows/e2e-tests.yml | 12 - .github/workflows/e2e.yml | 29 + .github/workflows/main.yml | 39 - .github/workflows/publish.yml | 132 - .github/workflows/release.yml | 90 + .github/workflows/unit-tests.yml | 22 +- .gitignore | 51 +- .husky/pre-commit | 4 - .markdownlint.yaml | 54 - .mlc.toml | 4 - .npmignore | 5 +- .prettierignore | 1 - .vale.ini | 48 - CHANGELOG.md | 2354 - LICENSE | 4 +- README.md | 36 +- api-extractor.json | 40 + benchmark/benchmark.js | 125 - benchmark/index.html | 28 - benchmark/index.tsx | 128 - config/docker/Dockerfile | 65 +- config/docker/README.md | 7 +- .../90-envsubst-on-html-templates.sh | 8 + .../docker/docker-entrypoint.d/95-clean-up.sh | 13 + config/docker/docker-run.sh | 12 - config/docker/hooks/build | 6 - config/docker/index.tpl.html | 28 - config/docker/nginx.conf | 71 - config/docker/nginx/handle_options.conf | 9 + config/docker/nginx/nginx.conf | 18 + config/docker/nginx/security.conf | 9 + .../nginx/templates/default.conf.template | 16 + .../templates/default.prefix.conf.template | 27 + {demo => config/docker/static}/favicon.png | Bin config/docker/static/index.prefix.tpl.html | 24 + .../docker/static/index.tpl.html | 19 +- config/docker/static/styles.css | 8 + config/webpack-utils.ts | 5 - custom.d.ts | 27 - cypress.config.ts | 20 - demo/ComboBox.tsx | 221 - demo/big-openapi.json | 27363 -------- demo/code-samples-demo.gif | Bin 0 -> 909418 bytes demo/components/FileInput.tsx | 52 - demo/index.html | 63 - demo/index.tsx | 213 - demo/museum-logo.png | Bin 2601 -> 0 bytes demo/petstore-logo.png | Bin 5346 -> 0 bytes demo/playground/hmr-playground.tsx | 22 - demo/redoc-demo.png | Bin 276557 -> 313349 bytes demo/ssr/index.ts | 65 - demo/swagger.yaml | 867 - demo/webpack.config.ts | 121 - docs/config.md | 311 - docs/deployment/cli.md | 35 - docs/deployment/docker.md | 40 - docs/deployment/html.md | 140 - docs/deployment/intro.md | 83 - docs/deployment/react.md | 82 - docs/images/code-samples-demo.gif | Bin 316908 -> 0 bytes docs/images/discriminator-demo.gif | Bin 269402 -> 0 bytes docs/images/nested-demo.gif | Bin 479975 -> 0 bytes docs/images/progressive-loading-demo.gif | Bin 521996 -> 0 bytes docs/images/redoc-logo.png | Bin 13438 -> 0 bytes docs/images/redoc.png | Bin 8047 -> 0 bytes docs/index.md | 97 - docs/quickstart.md | 53 - docs/redoc-vendor-extensions.md | 364 - docs/security-definitions-injection.md | 23 - e2e/e2e.html | 6 - e2e/index.html | 6 - e2e/integration/menu.e2e.ts | 129 - e2e/integration/misc.e2e.ts | 64 - e2e/integration/search.e2e.ts | 78 - e2e/integration/standalone.e2e.ts | 21 - e2e/integration/urls.e2e.ts | 19 - e2e/plugins/cy-ts-preprocessor.js | 30 - e2e/plugins/index.js | 5 - e2e/standalone-3-1.html | 8 - e2e/standalone-compatibility.html | 8 - e2e/standalone.html | 8 - e2e/tsconfig.json | 27 - eslint.config.mjs | 153 + examples/index.standalone.html | 27 + jest.config.js | 89 + package-lock.json | 35335 +++-------- package.json | 295 +- playground/Playground.tsx | 35 + playground/index.html | 30 + playground/index.tsx | 7 + {demo => playground/openapi}/museum.yaml | 388 +- {demo => playground/openapi}/openapi-3-1.yaml | 83 +- playground/openapi/petstore.yaml | 1382 + playground/openapi/rebilly.yaml | 40136 ++++++++++++ playwright.config.ts | 39 + playwright/index.html | 50 + .../openapi/menu/menu-with-tag-groups.yaml | 71 + playwright/openapi/menu/menu-with-tags.yaml | 1002 + playwright/openapi/menu/menu.yaml | 999 + .../openapi/petstore.yaml | 191 +- playwright/page-objects/Menu.ts | 25 + playwright/page-objects/Panel.ts | 31 + playwright/page-objects/Search.ts | 101 + playwright/page-objects/Section.ts | 63 + playwright/page-objects/click-through-menu.ts | 36 + playwright/pages/menu.html | 37 + playwright/pages/theme-colors-primary.html | 49 + playwright/pages/theme-middle-panel.html | 49 + playwright/pages/theme.html | 42 + playwright/tests/app.spec.ts | 77 + .../components/media-type-samples.spec.ts | 51 + .../components/media-types-switch.spec.ts | 19 + playwright/tests/menu.spec.ts | 59 + playwright/tests/navigation.spec.ts | 56 + playwright/tests/search.spec.ts | 74 + playwright/tests/theme.spec.ts | 65 + .../{invalidate-cache.sh => clear-cache.sh} | 10 +- scripts/list-licenses.js | 32 + scripts/minify.js | 55 + scripts/publish-cdn.sh | 4 +- scripts/version.js | 4 +- src/__tests__/ssr.test.tsx | 19 - src/__tests__/standalone.test.tsx | 20 - src/common-elements/CopyButtonWrapper.tsx | 44 - src/common-elements/Dropdown/Dropdown.tsx | 68 - src/common-elements/Dropdown/index.ts | 2 - src/common-elements/Dropdown/styled.ts | 94 - src/common-elements/Dropdown/types.ts | 25 - src/common-elements/PrismDiv.tsx | 124 - src/common-elements/Tooltip.tsx | 73 - src/common-elements/fields-layout.ts | 210 - src/common-elements/fields.ts | 152 - src/common-elements/headers.ts | 54 - src/common-elements/index.ts | 11 - src/common-elements/linkify.tsx | 80 - src/common-elements/mixins.ts | 6 - src/common-elements/panels.ts | 75 - src/common-elements/perfect-scrollbar.tsx | 102 - src/common-elements/samples.tsx | 44 - src/common-elements/schema.ts | 67 - src/common-elements/shelfs.tsx | 65 - src/common-elements/tabs.ts | 107 - src/components/ApiInfo/ApiInfo.tsx | 153 +- .../ApiInfo/__tests__/ApiInfo.test.tsx | 58 + .../__snapshots__/ApiInfo.test.tsx.snap | 260 + src/components/ApiInfo/index.ts | 2 +- .../ApiInfo/{styled.elements.ts => styled.ts} | 29 +- src/components/ApiLogo/ApiLogo.tsx | 27 - src/components/ApiLogo/styled.elements.tsx | 21 - .../CallbackSamples/CallbackReqSamples.tsx | 35 - .../CallbackSamples/CallbackSamples.tsx | 127 +- src/components/CallbackSamples/index.ts | 1 + src/components/Callbacks/CallbackDetails.tsx | 108 +- .../Callbacks/CallbackOperation.tsx | 90 +- src/components/Callbacks/CallbackSummary.tsx | 64 + src/components/Callbacks/CallbackTitle.tsx | 55 - src/components/Callbacks/CallbacksList.tsx | 67 +- .../Callbacks/__tests__/Callbacks.test.tsx | 52 + .../__tests__/fixtures/simple-callback.json | 15 +- src/components/Callbacks/index.ts | 6 +- src/components/Callbacks/styled.elements.ts | 20 - src/components/Callbacks/styled.ts | 11 + src/components/Content/Content.tsx | 18 + .../Content/__tests__/useAutoScroll.test.ts | 100 + src/components/Content/index.ts | 1 + src/components/Content/useAutoScroll.ts | 128 + src/components/ContentItem/ContentItem.tsx | 82 + .../__tests__/useIsExpanded.test.ts | 138 + src/components/ContentItem/index.ts | 1 + src/components/ContentItem/useIsExpanded.ts | 52 + src/components/ContentItems/ContentItems.tsx | 134 +- src/components/ContentItems/Items.tsx | 50 + src/components/ContentItems/VirtualList.tsx | 63 + .../ContentItems/__tests__/Items.test.tsx | 92 + .../__tests__/VirtualList.test.tsx | 188 + src/components/ContentItems/helpers.ts | 53 + src/components/ContentItems/index.ts | 1 + .../ContentItems/useScrollOnRender.ts | 33 + .../Discriminator/Discriminator.tsx | 64 + .../__tests__/DiscriminatorDropdown.test.tsx | 46 + .../fixtures/simple-discriminator.json | 5 +- src/components/Discriminator/index.ts | 1 + .../Download/DownloadSpecification.tsx | 110 + .../__tests__/DownloadSpecification.test.tsx | 61 + .../DownloadSpecification.test.tsx.snap | 757 + src/components/Download/index.ts | 1 + src/components/Download/types.ts | 18 + src/components/Download/useDownloadInfo.ts | 52 + .../DropdownOrLabel/DropdownOrLabel.tsx | 24 - src/components/Endpoint/Endpoint.tsx | 95 - src/components/Endpoint/styled.elements.ts | 88 - src/components/ErrorBoundary.tsx | 42 - .../ExpandAllButton/ExpandAllButton.tsx | 54 + .../__tests__/ExpandAllButton.test.tsx | 74 + src/components/ExpandAllButton/index.ts | 1 + .../ExternalDocumentation.tsx | 64 +- src/components/ExternalDocumentation/index.ts | 1 + src/components/Fields/ArrayItemDetails.tsx | 35 - src/components/Fields/EnumValues.tsx | 142 - src/components/Fields/Examples.tsx | 45 - src/components/Fields/Extensions.tsx | 42 - src/components/Fields/Field.tsx | 131 - src/components/Fields/FieldConstraints.tsx | 22 - src/components/Fields/FieldDetail.tsx | 24 - src/components/Fields/FieldDetails.tsx | 118 - src/components/Fields/Pattern.tsx | 33 - .../GenericChildrenSwitcher.tsx | 75 - src/components/JsonViewer/JsonViewer.tsx | 117 - src/components/JsonViewer/index.tsx | 1 - src/components/JsonViewer/style.ts | 111 - src/components/Language/LanguageDropdown.tsx | 74 + src/components/Language/LanguageItem.tsx | 55 + .../__tests__/LanguageDropdown.test.tsx | 35 + src/components/Language/constants.ts | 2 + src/components/Language/index.ts | 2 + src/components/Language/styled.ts | 111 + src/components/Loading/Loading.tsx | 28 - src/components/Loading/Spinner.svg.tsx | 36 - src/components/Markdown/AdvancedMarkdown.tsx | 50 - src/components/Markdown/Markdown.tsx | 119 +- src/components/Markdown/SanitizedMdBlock.tsx | 41 - .../Markdown/__tests__/Markdown.test.tsx | 56 + .../processHtmlTokens.test.ts.snap | 190 + .../html/__tests__/htmlJsxAttribute.test.ts | 108 + .../html/__tests__/processHtmlTokens.test.ts | 71 + .../Markdown/html/htmlJsxAttribute.ts | 188 + .../Markdown/html/processHtmlTokens.ts | 76 + src/components/Markdown/index.ts | 2 + src/components/Markdown/styled.elements.tsx | 168 - src/components/Markdown/types.ts | 21 + src/components/McpOverview/McpOverview.tsx | 114 + .../__tests__/McpOverview.test.tsx | 74 + .../__tests__/fixtures/mcp-info.json | 18 + src/components/McpOverview/index.ts | 1 + src/components/McpTool/McpTool.tsx | 154 + .../McpTool/__tests__/McpTool.test.tsx | 97 + .../McpTool/__tests__/fixtures/mcp-tools.json | 44 + src/components/McpTool/index.ts | 1 + .../MediaTypeSwitch/MediaTypesSwitch.tsx | 150 +- .../__tests__/MediaTypesSwitch.test.tsx | 166 + .../__tests__/fixtures/test-definition.json | 14 + src/components/MediaTypeSwitch/index.ts | 1 + src/components/Operation/Operation.tsx | 95 - src/components/OperationItem/Description.tsx | 19 + .../OperationItem/OperationItem.tsx | 154 + .../__tests__/OperationItem.test.tsx | 72 + .../__mocks__/mock-intersection-observer.ts | 48 + .../fixtures/operationDefinition.json | 25 + .../__tests__/fixtures/petstore.json | 38 + src/components/OperationItem/index.ts | 2 + src/components/OperationItem/types.ts | 5 + src/components/OptionsProvider.ts | 7 - src/components/Overview/Overview.tsx | 97 + .../Overview/__tests__/Overview.test.tsx | 69 + .../__snapshots__/Overview.test.tsx.snap | 970 + src/components/Overview/index.ts | 1 + src/components/PageFooter/PageFooter.tsx | 14 + src/components/PageFooter/index.ts | 1 + src/components/Panel/ResponsePanel.ts | 32 + src/components/Panel/Trigger.ts | 9 + src/components/Panel/index.ts | 3 + src/components/PanelItem/PanelItem.tsx | 25 + src/components/PanelItem/index.ts | 2 + src/components/PanelItem/styled.ts | 71 + src/components/Parameters/Parameters.tsx | 135 - src/components/Parameters/ParametersGroup.tsx | 36 - src/components/PayloadSamples/Example.tsx | 58 +- .../PayloadSamples/ExampleValue.tsx | 67 +- .../PayloadSamples/MediaTypeSamples.tsx | 137 +- .../PayloadSamples/PayloadSamples.tsx | 88 +- .../PayloadSamples/__tests__/Example.test.tsx | 51 + .../__tests__/PayloadSamples.test.tsx | 36 + .../__snapshots__/Example.test.tsx.snap | 1307 + .../fixtures/mediaTypeUrlencoded.json | 36 + .../PayloadSamples/exernalExampleHook.ts | 31 - src/components/PayloadSamples/index.ts | 6 + .../PayloadSamples/styled.elements.ts | 58 - src/components/PayloadSamples/styled.ts | 29 + src/components/PayloadSamples/types.ts | 26 + .../PropertyDetails/DescriptionEnums.tsx | 73 + src/components/PropertyDetails/EnumValues.tsx | 78 + src/components/PropertyDetails/Examples.tsx | 46 + src/components/PropertyDetails/Extensions.tsx | 38 + .../PropertyDetails/FieldDetail.tsx | 49 + .../PropertyDetails/FieldDetails.tsx | 161 + src/components/PropertyDetails/Pattern.tsx | 42 + .../PropertyDetails/PlusCircleIcon.tsx | 25 + .../PropertyDetails/PropertyDetails.tsx | 81 + .../PropertyDetails/SchemaTypeInfo.tsx | 32 + .../PropertyDetails/SimpleEnums.tsx | 41 + .../__tests__/Extensions.test.tsx | 28 + .../__tests__/FieldDetail.test.tsx | 26 + .../__tests__/FieldDetails.test.tsx | 134 + .../__tests__/PropertyDetails.test.tsx | 274 + .../__tests__/cycleColorsByLevel.test.ts | 25 + .../__tests__/fixtures/fields.json | 125 + .../PropertyDetails/cycleColorsByLevel.ts | 19 + src/components/PropertyDetails/index.ts | 3 + src/components/PropertyDetails/styled.ts | 36 + src/components/PropertyDetails/types.ts | 52 + src/components/Redoc/Redoc.tsx | 69 - src/components/Redoc/styled.elements.tsx | 57 - src/components/RedocStandalone.tsx | 53 - src/components/RedoclyOpenAPIDocs/Error.tsx | 72 + .../RedoclyOpenAPIDocs/ErrorBoundary.tsx | 50 + .../RedoclyOpenAPIDocs/Providers.tsx | 161 + .../RedoclyOpenAPIDocs/RedoclyOpenAPIDocs.tsx | 155 + .../RedoclyOpenAPIDocsStandalone.tsx | 152 + .../__tests__/AppProvider.test.tsx | 28 + .../__tests__/RedoclyOpenAPIDocs.test.tsx | 38 + src/components/RedoclyOpenAPIDocs/index.ts | 4 + src/components/RedoclyOpenAPIDocs/styled.tsx | 27 + src/components/RedoclyOpenAPIDocs/types.ts | 51 + src/components/RedoclyOpenAPIDocs/utils.ts | 40 + src/components/RenderHook/RenderHook.tsx | 18 + .../RenderHook/__tests__/RenderHook.test.tsx | 22 + src/components/RenderHook/index.ts | 1 + src/components/Request/RequestDetails.tsx | 88 + src/components/Request/types.ts | 20 + src/components/RequestParameters/Body.tsx | 33 + .../RequestParameters/ParametersGroup.tsx | 63 + .../RequestParameters/RequestParameters.tsx | 82 + src/components/RequestParameters/index.ts | 3 + src/components/RequestSamples/CodeSample.tsx | 113 + src/components/RequestSamples/Example.tsx | 53 + .../RequestSamples/RequestSamples.tsx | 154 +- .../__tests__/RequestSamples.test.tsx | 180 + .../fixtures/operationDefinition.json | 58 + .../__tests__/fixtures/petstore.json | 467 + .../__tests__/fixtures/test-definition.json | 19 + .../__tests__/useCodeSamples.test.ts | 65 + src/components/RequestSamples/index.ts | 2 + .../RequestSamples/useCodeSamples.ts | 49 + .../ResponseSamples/ResponseSamples.tsx | 92 +- src/components/ResponseSamples/Summary.tsx | 22 + .../__tests__/ResponseSamples.test.tsx | 49 + .../__tests__/fixtures/museum.json | 179 + .../operationDefinitionWithContent.json | 29 + .../operationDefinitionWithoutContent.json | 17 + src/components/ResponseSamples/index.ts | 1 + .../Responses/OperationResponseList.tsx | 101 + src/components/Responses/Response.tsx | 47 - src/components/Responses/ResponseDetails.tsx | 88 +- src/components/Responses/ResponseHeaders.tsx | 57 +- src/components/Responses/ResponseTitle.tsx | 47 - src/components/Responses/ResponsesList.tsx | 37 - .../__tests__/ResponseDetails.test.tsx | 142 + .../__tests__/ResponsesHeaders.test.tsx | 30 + src/components/Responses/index.ts | 10 + src/components/Responses/styled.elements.ts | 54 - src/components/Responses/styled.ts | 34 + src/components/Responses/types.ts | 15 + src/components/RightPanel/RightPanel.tsx | 91 + src/components/RightPanel/index.ts | 1 + src/components/Samples/ExampleSwitch.tsx | 75 + src/components/Samples/index.ts | 3 + src/components/Samples/use-example-key.ts | 24 + src/components/Schema/ArraySchema.tsx | 150 +- .../Schema/DiscriminatorDropdown.tsx | 60 - src/components/Schema/ObjectSchema.tsx | 175 +- src/components/Schema/OneOfSchema.tsx | 144 +- src/components/Schema/RecursiveSchema.tsx | 20 +- src/components/Schema/Schema.tsx | 178 +- src/components/Schema/SubSchema.tsx | 60 + .../Schema/__tests__/ArraySchema.test.tsx | 137 + .../Schema/__tests__/ObjectSchema.test.tsx | 157 + .../Schema/__tests__/OneOfSchema.test.tsx | 48 + .../Schema/__tests__/Schema.test.tsx | 57 + .../fixtures/oneOfWithDiscriminator.json | 133 + .../__tests__/fixtures/requiredField.json | 138 + .../fixtures/schemaExpansionLevel.json | 154 + .../__tests__/useOneOfLocationIdx.test.ts | 28 + src/components/Schema/helpers.ts | 26 + src/components/Schema/index.ts | 11 +- src/components/Schema/types.ts | 46 + src/components/Schema/useOneOfLocationIdx.ts | 21 + .../SchemaDefinition/SchemaDefinition.tsx | 203 +- src/components/SchemaDefinition/index.ts | 1 + src/components/Search/Search.tsx | 38 + src/components/Search/SearchDialog.tsx | 245 + src/components/Search/SearchTrigger.tsx | 88 + src/components/Search/index.ts | 3 + src/components/SearchBox/SearchBox.tsx | 185 - src/components/SearchBox/styled.elements.tsx | 101 - .../SectionContent/SectionContent.tsx | 73 + src/components/SectionContent/index.ts | 1 + src/components/SectionItem/SectionItem.tsx | 43 + src/components/SectionItem/index.ts | 1 + src/components/Security/Divider.tsx | 25 + src/components/Security/OAuthFlow.tsx | 67 + src/components/Security/OAuthScopes.tsx | 199 + src/components/Security/Security.tsx | 35 + src/components/Security/SecurityButton.tsx | 122 + src/components/Security/SecurityFlow.tsx | 128 + src/components/Security/SecurityModal.tsx | 111 + .../Security/SecuritySchemeItem.tsx | 45 + .../Security/__tests__/Security.test.tsx | 48 + .../__tests__/SecurityButton.test.tsx | 56 + .../Security/__tests__/SecurityModal.test.tsx | 165 + src/components/Security/helper.ts | 20 + src/components/Security/index.ts | 10 + src/components/Security/styled.ts | 17 + .../SecurityRequirement/OAuthFlow.tsx | 71 - .../SecurityRequirement/RequiredScopesRow.tsx | 18 - .../SecurityRequirement/SecurityDetails.tsx | 65 - .../SecurityRequirement/SecurityHeader.tsx | 45 - .../SecurityRequirement.tsx | 102 - .../SecurityRequirement/styled.elements.ts | 129 - .../SecuritySchemes/SecuritySchemes.tsx | 43 - src/components/SeeMore/SeeMore.tsx | 65 - .../SelectOnClick/SelectOnClick.tsx | 25 - .../SelectOrLabel/SelectOrLabel.tsx | 29 + src/components/SelectOrLabel/index.ts | 1 + .../ServerList/ServerDescriptionTooltip.tsx | 46 + src/components/ServerList/ServerList.tsx | 164 + .../ServerList/__tests__/ServerList.test.tsx | 100 + src/components/ServerList/index.ts | 1 + src/components/ServerList/types.ts | 6 + .../ServerListDropdown/ServerListDropdown.tsx | 31 + src/components/ServerListDropdown/index.ts | 1 + src/components/ServerListDropdown/styled.ts | 35 + src/components/SideMenu/Logo.tsx | 18 - src/components/SideMenu/MenuItem.tsx | 132 - src/components/SideMenu/MenuItems.tsx | 37 - src/components/SideMenu/SideMenu.tsx | 77 +- src/components/SideMenu/hooks/useMenuItems.ts | 170 + src/components/SideMenu/index.ts | 5 +- src/components/SideMenu/styled.elements.ts | 208 - src/components/SideMenu/types.ts | 18 + src/components/SourceCode/SourceCode.tsx | 29 - ...evronSvg.tsx => AnimatedChevronButton.tsx} | 16 +- .../StickySidebar/FloatingButton.tsx | 63 + src/components/StickySidebar/Logo.tsx | 21 + .../StickySidebar/SidebarActions.tsx | 128 + .../StickySidebar/StickyResponsiveSidebar.tsx | 203 +- .../__tests__/AnimatedChevronButton.test.tsx | 23 + .../__tests__/FloatingButton.test.tsx | 90 + .../__tests__/SidebarActions.test.tsx | 122 + src/components/StickySidebar/index.ts | 1 + src/components/StoreBuilder.ts | 89 - src/components/Tabs/Tabs.tsx | 65 + src/components/Tabs/__tests__/Tabs.test.tsx | 39 + src/components/Tabs/index.ts | 2 + src/components/Tabs/useTabsState.ts | 37 + .../TagItem/OperationNavigationItems.tsx | 104 + .../TagItem/OperationsNavigation.tsx | 130 + src/components/TagItem/TagItem.tsx | 113 + src/components/TagItem/index.ts | 1 + src/components/TagItem/styled.ts | 9 + src/components/TagItem/types.ts | 6 + src/components/ViewNested/ViewNested.tsx | 120 + .../ViewNested/__tests__/ViewNested.test.tsx | 27 + src/components/ViewNested/index.ts | 1 + src/components/__tests__/Callbacks.test.tsx | 59 - .../__tests__/DiscriminatorDropdown.test.tsx | 57 - .../__tests__/FieldDetails.test.tsx | 116 - src/components/__tests__/JsonViewer.tsx | 104 - src/components/__tests__/OneOfSchema.test.tsx | 82 - .../__tests__/Samples/ExampleSwitch.test.tsx | 49 + .../__tests__/Samples/use-example-key.test.ts | 38 + src/components/__tests__/Schema.test.tsx | 67 - .../__tests__/SchemaDefinition.test.tsx | 82 - .../__tests__/SecurityRequirement.test.tsx | 87 - .../DiscriminatorDropdown.test.tsx.snap | 3051 - .../__snapshots__/FieldDetails.test.tsx.snap | 207 - .../__snapshots__/OneOfSchema.test.tsx.snap | 53 - .../SecurityRequirement.test.tsx.snap | 23 - .../__tests__/common/ClearButton.test.tsx | 22 + .../__tests__/common/Dropdown.test.tsx | 75 + .../__snapshots__/ClearButton.test.tsx.snap | 29 + .../__snapshots__/Dropdown.test.tsx.snap | 284 + .../fixtures/simple-security-fixture.json | 67 - src/components/__tests__/mocks/examples.ts | 118 + src/components/common/Badges.tsx | 60 + .../common/BodyContent/BodyContent.tsx | 111 + src/components/common/BodyContent/index.ts | 1 + .../common/ClearButton/ClearButton.tsx | 16 + src/components/common/ClearButton/index.ts | 2 + src/components/common/ClearButton/styled.ts | 18 + src/components/common/ClearButton/types.ts | 7 + src/components/common/CodeBlockPanel.tsx | 10 + src/components/common/ConstraintsView.tsx | 29 + src/components/common/Dropdown/Dropdown.tsx | 210 + src/components/common/Dropdown/index.ts | 2 + .../ExpandableExample/ExpandableExample.tsx | 53 + .../common/ExpandableExample/index.ts | 1 + src/components/common/Extensions.tsx | 41 + src/components/common/Fields/fields-layout.ts | 270 + src/components/common/Fields/fields.ts | 131 + src/components/common/Fields/index.ts | 2 + src/components/common/LinkToField.tsx | 77 + src/components/common/OperationItemTitle.ts | 46 + .../SchemaSelection/SchemaSelection.tsx | 99 + .../common/SchemaSelection/index.ts | 1 + src/components/common/Select/Select.tsx | 67 + src/components/common/Select/index.ts | 2 + src/components/common/Select/styled.ts | 109 + src/components/common/Select/types.ts | 21 + .../common/Skeleton/LanguageListSkeleton.tsx | 56 + src/components/common/Skeleton/Skeleton.tsx | 59 + src/components/common/Skeleton/index.ts | 2 + .../common/__tests__/Dropdown.test.tsx | 162 + .../common/__tests__/LinkToField.test.tsx | 56 + .../__tests__/fixtures/simpleOpenAPI.json | 111 + src/components/common/headers.ts | 9 + src/components/common/index.ts | 15 + src/components/common/linkify.tsx | 69 + src/components/common/mixins.ts | 6 + src/components/common/panels.ts | 163 + src/components/common/schema.ts | 86 + src/components/common/styled.ts | 72 + src/components/index.ts | 58 +- src/components/testProviders.tsx | 19 - src/constants.ts | 45 + src/custom.d.ts | 54 + src/empty.js | 7 +- src/hoc/types.ts | 52 + src/hoc/utils.ts | 5 + src/hoc/withRouter.tsx | 27 + src/hoc/withStore.tsx | 31 + src/{utils => hooks}/highlight.ts | 20 +- src/hooks/index.ts | 6 + src/hooks/useActivateExample.ts | 42 + src/hooks/useActiveWithFallback.ts | 17 + src/hooks/useContentItems.ts | 31 + src/hooks/useIsMobile.ts | 22 + src/hooks/useLocation.ts | 29 + src/hooks/usePerformanceMetrics.ts | 38 + src/hooks/useRouter.ts | 30 + src/hooks/useSearch.ts | 54 + src/hooks/useTelemetry.ts | 112 + src/hooks/useTranslate.ts | 6 + src/icons/CSharpIcon/CSharpIcon.tsx | 44 + src/icons/CSharpIcon/index.ts | 1 + src/icons/CurlIcon/CurlIcon.tsx | 58 + src/icons/CurlIcon/index.ts | 1 + src/icons/GOIcon/GOIcon.tsx | 37 + src/icons/GOIcon/index.ts | 1 + src/icons/JavaIcon/JavaIcon.tsx | 49 + src/icons/JavaIcon/index.ts | 1 + src/icons/JavaScriptIcon/JavaScriptIcon.tsx | 22 + src/icons/JavaScriptIcon/index.ts | 1 + src/icons/NodeJSIcon/NodeJSIcon.tsx | 24 + src/icons/NodeJSIcon/index.ts | 1 + src/icons/PHPIcon/PHPIcon.tsx | 80 + src/icons/PHPIcon/index.ts | 1 + src/icons/PayloadIcon/PayloadIcon.tsx | 17 + src/icons/PayloadIcon/index.ts | 1 + src/icons/PythonIcon/PythonIcon.tsx | 47 + src/icons/PythonIcon/index.ts | 1 + src/icons/RIcon/RIcon.tsx | 52 + src/icons/RIcon/index.ts | 1 + src/icons/RubyIcon/RubyIcon.tsx | 335 + src/icons/RubyIcon/index.ts | 1 + src/index.ts | 21 +- src/jotai/app.ts | 164 + src/jotai/operation.ts | 53 + src/jotai/store.ts | 23 + src/jotai/telemetry.ts | 45 + src/jotai/use-write-atom.ts | 11 + src/models/__tests__/Callback.test.ts | 24 + .../__tests__}/FieldModel.test.ts | 62 +- src/models/__tests__/MediaContent.test.ts | 79 + src/models/__tests__/Operation.test.ts | 94 + src/models/__tests__/Response.test.ts | 204 + .../__tests__}/Schema.circular.test.ts | 280 +- src/models/__tests__/Schema.test.ts | 833 + .../__snapshots__/Schema.test.ts.snap | 26 +- .../fixtures/3.1/conditionalField.json | 0 .../fixtures/3.1/conditionalSchema.json | 0 .../fixtures/3.1/patternProperties.json | 5 +- .../__tests__/fixtures/3.1/prefixItems.json | 0 .../__tests__/fixtures/arrayItems.json | 0 src/models/__tests__/fixtures/callback.json | 57 + .../__tests__/fixtures/discriminator.json | 10 +- src/models/__tests__/fixtures/fields.json | 106 + .../fixtures/nestedEnumDescroptionSample.json | 0 .../__tests__/fixtures/oneOfTitles.json | 143 + .../noRequestOperationDefinition.json | 25 + .../operation/operationDefinition.json | 58 + .../fixtures/operation/petstore.json | 462 + .../models => models/__tests__}/helpers.ts | 21 +- .../__tests__/request.test.ts} | 35 +- src/models/callback.ts | 50 + src/models/code-sample-options.ts | 7 + src/models/example.ts | 27 + src/models/field.ts | 146 + src/models/group.ts | 48 + src/models/index.ts | 15 + src/models/mediaContent.ts | 41 + src/models/mediaType.ts | 218 + src/models/operation.ts | 212 + src/models/request.ts | 51 + src/models/response.ts | 84 + src/models/schema.ts | 716 + src/models/security.ts | 128 + src/models/tab.ts | 4 + src/models/types.ts | 304 + src/polyfills.ts | 2 - src/services/AppStore.ts | 171 - src/services/ClipboardService.ts | 90 - src/services/HistoryService.ts | 77 - src/services/Labels.ts | 34 - src/services/MarkdownRenderer.ts | 230 - src/services/MarkerService.ts | 51 - src/services/MenuBuilder.ts | 304 - src/services/MenuStore.ts | 258 - src/services/OpenAPIParser.ts | 231 +- src/services/RedocNormalizedOptions.ts | 365 - src/services/ScrollService.ts | 87 - src/services/SearchStore.ts | 65 - src/services/SearchWorker.worker.ts | 109 - src/services/SpecStore.ts | 38 - .../__tests__/MarkdownRenderer.test.ts | 118 - src/services/__tests__/MarkerService.test.ts | 101 - src/services/__tests__/OpenAPIParser.test.ts | 53 +- .../__snapshots__/OpenAPIParser.test.ts.snap | 53 +- .../__snapshots__/prism.test.ts.snap | 3 - src/services/__tests__/check.test.ts | 26 + .../fixtures/3.1/schemaDefinition.json | 54 - .../fixtures/3.1/unevaluatedProperties.json | 60 - .../fixtures/allOfSelfReferencingArray.json | 21 + src/services/__tests__/fixtures/callback.json | 64 - src/services/__tests__/fixtures/fields.json | 46 - .../__tests__/fixtures/oneOfTitles.json | 79 - src/services/__tests__/fixtures/petstore.yaml | 457 + .../__tests__/history.service.test.ts | 38 - src/services/__tests__/models/ApiInfo.test.ts | 194 - .../__tests__/models/Callback.test.ts | 26 - .../__tests__/models/MenuBuilder.test.ts | 24 - .../__tests__/models/Response.test.ts | 136 - src/services/__tests__/models/Schema.test.ts | 631 - src/services/__tests__/prism.test.ts | 23 - src/services/__tests__/telemetry.test.ts | 110 + src/services/__tests__/utils.test.ts | 63 + src/services/check.ts | 152 + src/services/code-samples/constants.ts | 17 + src/services/code-samples/generator.ts | 12 + src/services/code-samples/index.ts | 2 + src/services/code-samples/types.ts | 20 + .../config-options/__tests__/helpers.test.ts | 194 + src/services/config-options/helpers.ts | 61 + src/services/config-options/index.ts | 2 + .../config-options/normalizeOptions.ts | 54 + src/services/config-options/types.ts | 36 + .../history/__tests__/helpers.test.ts | 19 + src/services/history/helpers.ts | 77 + src/services/history/index.ts | 1 + src/services/index.ts | 23 +- src/services/menu/__tests__/builder.test.ts | 100 + .../__tests__/fixtures}/pathItems.json | 9 +- src/services/menu/builder.ts | 83 + src/services/menu/index.ts | 1 + src/services/menu/markdown.ts | 124 + src/services/menu/operation.ts | 59 + src/services/menu/tags.ts | 310 + src/services/models/ApiInfo.ts | 78 - src/services/models/Callback.ts | 58 - src/services/models/Example.ts | 61 - src/services/models/Field.ts | 136 - src/services/models/Group.model.ts | 91 - src/services/models/MediaContent.ts | 58 - src/services/models/MediaType.ts | 91 - src/services/models/Operation.ts | 296 - src/services/models/RequestBody.ts | 31 - src/services/models/Response.ts | 77 - src/services/models/Schema.ts | 624 - src/services/models/SecurityRequirement.ts | 38 - src/services/models/SecuritySchemes.ts | 68 - src/services/models/Webhook.ts | 46 - src/services/models/index.ts | 13 - src/services/search/engine.ts | 208 + src/services/search/init.ts | 223 + src/services/search/types.ts | 24 + src/services/telemetry.ts | 99 + src/services/types.ts | 179 +- src/services/utils.ts | 96 + src/setupTests.ts | 23 +- src/standalone.tsx | 109 +- src/styled-components.ts | 58 +- src/testProviders.tsx | 15 + src/theme.ts | 390 - src/types/app.ts | 6 + src/types/index.ts | 6 +- src/types/open-api.ts | 185 +- src/types/security.ts | 11 + src/utils/JsonPointer.ts | 18 +- .../loadAndBundleSpec.test.ts.snap | 52641 +++++++++++++++- .../simplifyAstStructure.test.ts.snap | 61 + src/utils/__tests__/areArraysEqual.test.ts | 40 + src/utils/__tests__/argValuesHelpers.ts | 71 + .../__tests__/convertSwagger2OpenAPI.test.ts | 469 + src/utils/__tests__/debounce.test.ts | 73 + src/utils/__tests__/debug.test.ts | 27 + src/utils/__tests__/dom.test.ts | 124 + src/utils/__tests__/hasNestedFields.test.ts | 184 + src/utils/__tests__/helpers.test.ts | 214 +- src/utils/__tests__/isMobile.test.ts | 36 + src/utils/__tests__/loadAndBundleSpec.test.ts | 33 +- src/utils/__tests__/local-storage.test.ts | 62 + src/utils/__tests__/openapi.test.ts | 225 +- src/utils/__tests__/path.test.ts | 17 + src/utils/__tests__/queryString.test.ts | 72 + src/utils/__tests__/replaceVariables.test.ts | 49 + .../__tests__/simplifyAstStructure.test.ts | 37 + src/utils/__tests__/sort.test.ts | 21 + src/utils/__tests__/string.test.ts | 19 + src/utils/__tests__/theme-helpers.test.ts | 25 + src/utils/__tests__/url.test.ts | 153 + src/utils/areArraysEqual.ts | 3 + src/utils/argValuesHelpers.ts | 42 + src/utils/compose.ts | 2 + src/utils/convertSwagger2OpenAPI.ts | 22 + src/utils/cookies.ts | 95 + src/utils/debounce.ts | 26 + src/utils/debug.ts | 4 +- src/utils/decorators.ts | 43 - src/utils/dom.ts | 103 +- src/utils/environments.ts | 16 + src/utils/hasNestedFields.ts | 10 + src/utils/helpers.ts | 212 +- src/utils/index.ts | 33 +- src/utils/isMobile.ts | 21 + src/utils/jsonToHtml.ts | 121 - src/utils/loadAndBundleSpec.ts | 64 +- src/utils/local-storage.ts | 12 + src/utils/mcp.ts | 12 + src/utils/memoize.ts | 49 - src/utils/menu.ts | 5 + src/utils/object.ts | 9 +- src/utils/openapi.ts | 377 +- src/utils/parameters.ts | 13 + src/utils/path.ts | 32 + src/utils/queryString.ts | 74 + src/utils/removeMarkdownLinks.ts | 4 + src/utils/replaceVariables.ts | 17 + src/utils/saveTextBeforeHeading.ts | 53 + src/utils/security-details.ts | 63 + src/utils/session-storage.ts | 12 + src/utils/simplifyAstStructure.ts | 28 + src/utils/sort.ts | 2 +- src/utils/string.ts | 76 + src/utils/stripFormatting.ts | 11 + src/utils/test-utils.ts | 8 +- src/utils/theme-helpers.ts | 35 + src/utils/url.ts | 37 + tsconfig.json | 69 +- tsconfig.lib.json | 11 - tslint.json | 27 - typings/styled-patch.d.ts | 22 - vite.config.ts | 90 + webpack.config.ts | 123 - 773 files changed, 137751 insertions(+), 81918 deletions(-) create mode 100644 .changeset/config.json delete mode 100644 .editorconfig delete mode 100644 .eslintrc.js create mode 100644 .github/actions/get-package-version/action.yml create mode 100644 .github/actions/setup-node/action.yml create mode 100644 .github/actions/setup-playwright/action.yml delete mode 100644 .github/styles/Rules/BritishEnglish.yml delete mode 100644 .github/styles/Rules/FutureTense.yml delete mode 100644 .github/styles/Rules/HeaderGerunds.yml delete mode 100644 .github/styles/Rules/InclusionGenderCulture.yml delete mode 100644 .github/styles/Rules/OxfordComma.yml delete mode 100644 .github/styles/config/vocabularies/Rules/accept.txt delete mode 100644 .github/styles/config/vocabularies/Rules/reject.txt create mode 100644 .github/workflows/docker.yml delete mode 100644 .github/workflows/docs-tests.yaml delete mode 100644 .github/workflows/e2e-tests.yml create mode 100644 .github/workflows/e2e.yml delete mode 100644 .github/workflows/main.yml delete mode 100644 .github/workflows/publish.yml create mode 100644 .github/workflows/release.yml delete mode 100755 .husky/pre-commit delete mode 100644 .markdownlint.yaml delete mode 100644 .mlc.toml delete mode 100644 .prettierignore delete mode 100644 .vale.ini delete mode 100644 CHANGELOG.md create mode 100644 api-extractor.json delete mode 100644 benchmark/benchmark.js delete mode 100644 benchmark/index.html delete mode 100644 benchmark/index.tsx create mode 100644 config/docker/docker-entrypoint.d/90-envsubst-on-html-templates.sh create mode 100644 config/docker/docker-entrypoint.d/95-clean-up.sh delete mode 100644 config/docker/docker-run.sh delete mode 100755 config/docker/hooks/build delete mode 100644 config/docker/index.tpl.html delete mode 100644 config/docker/nginx.conf create mode 100644 config/docker/nginx/handle_options.conf create mode 100644 config/docker/nginx/nginx.conf create mode 100644 config/docker/nginx/security.conf create mode 100644 config/docker/nginx/templates/default.conf.template create mode 100644 config/docker/nginx/templates/default.prefix.conf.template rename {demo => config/docker/static}/favicon.png (100%) create mode 100644 config/docker/static/index.prefix.tpl.html rename demo/playground/index.html => config/docker/static/index.tpl.html (50%) create mode 100644 config/docker/static/styles.css delete mode 100644 config/webpack-utils.ts delete mode 100644 custom.d.ts delete mode 100644 cypress.config.ts delete mode 100644 demo/ComboBox.tsx delete mode 100644 demo/big-openapi.json create mode 100644 demo/code-samples-demo.gif delete mode 100644 demo/components/FileInput.tsx delete mode 100644 demo/index.html delete mode 100644 demo/index.tsx delete mode 100644 demo/museum-logo.png delete mode 100644 demo/petstore-logo.png delete mode 100644 demo/playground/hmr-playground.tsx delete mode 100644 demo/ssr/index.ts delete mode 100644 demo/swagger.yaml delete mode 100644 demo/webpack.config.ts delete mode 100644 docs/config.md delete mode 100644 docs/deployment/cli.md delete mode 100644 docs/deployment/docker.md delete mode 100644 docs/deployment/html.md delete mode 100644 docs/deployment/intro.md delete mode 100644 docs/deployment/react.md delete mode 100644 docs/images/code-samples-demo.gif delete mode 100644 docs/images/discriminator-demo.gif delete mode 100644 docs/images/nested-demo.gif delete mode 100644 docs/images/progressive-loading-demo.gif delete mode 100644 docs/images/redoc-logo.png delete mode 100644 docs/images/redoc.png delete mode 100644 docs/index.md delete mode 100644 docs/quickstart.md delete mode 100644 docs/redoc-vendor-extensions.md delete mode 100644 docs/security-definitions-injection.md delete mode 100644 e2e/e2e.html delete mode 100644 e2e/index.html delete mode 100644 e2e/integration/menu.e2e.ts delete mode 100644 e2e/integration/misc.e2e.ts delete mode 100644 e2e/integration/search.e2e.ts delete mode 100644 e2e/integration/standalone.e2e.ts delete mode 100644 e2e/integration/urls.e2e.ts delete mode 100644 e2e/plugins/cy-ts-preprocessor.js delete mode 100644 e2e/plugins/index.js delete mode 100644 e2e/standalone-3-1.html delete mode 100644 e2e/standalone-compatibility.html delete mode 100644 e2e/standalone.html delete mode 100644 e2e/tsconfig.json create mode 100644 eslint.config.mjs create mode 100644 examples/index.standalone.html create mode 100644 jest.config.js create mode 100755 playground/Playground.tsx create mode 100755 playground/index.html create mode 100755 playground/index.tsx rename {demo => playground/openapi}/museum.yaml (74%) rename {demo => playground/openapi}/openapi-3-1.yaml (95%) create mode 100644 playground/openapi/petstore.yaml create mode 100644 playground/openapi/rebilly.yaml create mode 100644 playwright.config.ts create mode 100644 playwright/index.html create mode 100644 playwright/openapi/menu/menu-with-tag-groups.yaml create mode 100644 playwright/openapi/menu/menu-with-tags.yaml create mode 100644 playwright/openapi/menu/menu.yaml rename demo/openapi.yaml => playwright/openapi/petstore.yaml (85%) create mode 100644 playwright/page-objects/Menu.ts create mode 100644 playwright/page-objects/Panel.ts create mode 100644 playwright/page-objects/Search.ts create mode 100644 playwright/page-objects/Section.ts create mode 100644 playwright/page-objects/click-through-menu.ts create mode 100644 playwright/pages/menu.html create mode 100644 playwright/pages/theme-colors-primary.html create mode 100644 playwright/pages/theme-middle-panel.html create mode 100644 playwright/pages/theme.html create mode 100644 playwright/tests/app.spec.ts create mode 100644 playwright/tests/components/media-type-samples.spec.ts create mode 100644 playwright/tests/components/media-types-switch.spec.ts create mode 100644 playwright/tests/menu.spec.ts create mode 100644 playwright/tests/navigation.spec.ts create mode 100644 playwright/tests/search.spec.ts create mode 100644 playwright/tests/theme.spec.ts rename scripts/{invalidate-cache.sh => clear-cache.sh} (75%) create mode 100644 scripts/list-licenses.js create mode 100644 scripts/minify.js delete mode 100644 src/__tests__/ssr.test.tsx delete mode 100644 src/__tests__/standalone.test.tsx delete mode 100644 src/common-elements/CopyButtonWrapper.tsx delete mode 100644 src/common-elements/Dropdown/Dropdown.tsx delete mode 100644 src/common-elements/Dropdown/index.ts delete mode 100644 src/common-elements/Dropdown/styled.ts delete mode 100644 src/common-elements/Dropdown/types.ts delete mode 100644 src/common-elements/PrismDiv.tsx delete mode 100644 src/common-elements/Tooltip.tsx delete mode 100644 src/common-elements/fields-layout.ts delete mode 100644 src/common-elements/fields.ts delete mode 100644 src/common-elements/headers.ts delete mode 100644 src/common-elements/index.ts delete mode 100644 src/common-elements/linkify.tsx delete mode 100644 src/common-elements/mixins.ts delete mode 100644 src/common-elements/panels.ts delete mode 100644 src/common-elements/perfect-scrollbar.tsx delete mode 100644 src/common-elements/samples.tsx delete mode 100644 src/common-elements/schema.ts delete mode 100644 src/common-elements/shelfs.tsx delete mode 100644 src/common-elements/tabs.ts create mode 100644 src/components/ApiInfo/__tests__/ApiInfo.test.tsx create mode 100644 src/components/ApiInfo/__tests__/__snapshots__/ApiInfo.test.tsx.snap rename src/components/ApiInfo/{styled.elements.ts => styled.ts} (50%) delete mode 100644 src/components/ApiLogo/ApiLogo.tsx delete mode 100644 src/components/ApiLogo/styled.elements.tsx delete mode 100644 src/components/CallbackSamples/CallbackReqSamples.tsx create mode 100644 src/components/CallbackSamples/index.ts create mode 100644 src/components/Callbacks/CallbackSummary.tsx delete mode 100644 src/components/Callbacks/CallbackTitle.tsx create mode 100644 src/components/Callbacks/__tests__/Callbacks.test.tsx rename src/components/{ => Callbacks}/__tests__/fixtures/simple-callback.json (81%) delete mode 100644 src/components/Callbacks/styled.elements.ts create mode 100644 src/components/Callbacks/styled.ts create mode 100644 src/components/Content/Content.tsx create mode 100644 src/components/Content/__tests__/useAutoScroll.test.ts create mode 100644 src/components/Content/index.ts create mode 100644 src/components/Content/useAutoScroll.ts create mode 100644 src/components/ContentItem/ContentItem.tsx create mode 100644 src/components/ContentItem/__tests__/useIsExpanded.test.ts create mode 100644 src/components/ContentItem/index.ts create mode 100644 src/components/ContentItem/useIsExpanded.ts create mode 100644 src/components/ContentItems/Items.tsx create mode 100644 src/components/ContentItems/VirtualList.tsx create mode 100644 src/components/ContentItems/__tests__/Items.test.tsx create mode 100644 src/components/ContentItems/__tests__/VirtualList.test.tsx create mode 100644 src/components/ContentItems/helpers.ts create mode 100644 src/components/ContentItems/index.ts create mode 100644 src/components/ContentItems/useScrollOnRender.ts create mode 100644 src/components/Discriminator/Discriminator.tsx create mode 100644 src/components/Discriminator/__tests__/DiscriminatorDropdown.test.tsx rename src/components/{ => Discriminator}/__tests__/fixtures/simple-discriminator.json (93%) create mode 100644 src/components/Discriminator/index.ts create mode 100644 src/components/Download/DownloadSpecification.tsx create mode 100644 src/components/Download/__tests__/DownloadSpecification.test.tsx create mode 100644 src/components/Download/__tests__/__snapshots__/DownloadSpecification.test.tsx.snap create mode 100644 src/components/Download/index.ts create mode 100644 src/components/Download/types.ts create mode 100644 src/components/Download/useDownloadInfo.ts delete mode 100644 src/components/DropdownOrLabel/DropdownOrLabel.tsx delete mode 100644 src/components/Endpoint/Endpoint.tsx delete mode 100644 src/components/Endpoint/styled.elements.ts delete mode 100644 src/components/ErrorBoundary.tsx create mode 100644 src/components/ExpandAllButton/ExpandAllButton.tsx create mode 100644 src/components/ExpandAllButton/__tests__/ExpandAllButton.test.tsx create mode 100644 src/components/ExpandAllButton/index.ts create mode 100644 src/components/ExternalDocumentation/index.ts delete mode 100644 src/components/Fields/ArrayItemDetails.tsx delete mode 100644 src/components/Fields/EnumValues.tsx delete mode 100644 src/components/Fields/Examples.tsx delete mode 100644 src/components/Fields/Extensions.tsx delete mode 100644 src/components/Fields/Field.tsx delete mode 100644 src/components/Fields/FieldConstraints.tsx delete mode 100644 src/components/Fields/FieldDetail.tsx delete mode 100644 src/components/Fields/FieldDetails.tsx delete mode 100644 src/components/Fields/Pattern.tsx delete mode 100644 src/components/GenericChildrenSwitcher/GenericChildrenSwitcher.tsx delete mode 100644 src/components/JsonViewer/JsonViewer.tsx delete mode 100644 src/components/JsonViewer/index.tsx delete mode 100644 src/components/JsonViewer/style.ts create mode 100644 src/components/Language/LanguageDropdown.tsx create mode 100644 src/components/Language/LanguageItem.tsx create mode 100644 src/components/Language/__tests__/LanguageDropdown.test.tsx create mode 100644 src/components/Language/constants.ts create mode 100644 src/components/Language/index.ts create mode 100644 src/components/Language/styled.ts delete mode 100644 src/components/Loading/Loading.tsx delete mode 100644 src/components/Loading/Spinner.svg.tsx delete mode 100644 src/components/Markdown/AdvancedMarkdown.tsx delete mode 100644 src/components/Markdown/SanitizedMdBlock.tsx create mode 100644 src/components/Markdown/__tests__/Markdown.test.tsx create mode 100644 src/components/Markdown/html/__tests__/__snapshots__/processHtmlTokens.test.ts.snap create mode 100644 src/components/Markdown/html/__tests__/htmlJsxAttribute.test.ts create mode 100644 src/components/Markdown/html/__tests__/processHtmlTokens.test.ts create mode 100644 src/components/Markdown/html/htmlJsxAttribute.ts create mode 100644 src/components/Markdown/html/processHtmlTokens.ts create mode 100644 src/components/Markdown/index.ts delete mode 100644 src/components/Markdown/styled.elements.tsx create mode 100644 src/components/Markdown/types.ts create mode 100644 src/components/McpOverview/McpOverview.tsx create mode 100644 src/components/McpOverview/__tests__/McpOverview.test.tsx create mode 100644 src/components/McpOverview/__tests__/fixtures/mcp-info.json create mode 100644 src/components/McpOverview/index.ts create mode 100644 src/components/McpTool/McpTool.tsx create mode 100644 src/components/McpTool/__tests__/McpTool.test.tsx create mode 100644 src/components/McpTool/__tests__/fixtures/mcp-tools.json create mode 100644 src/components/McpTool/index.ts create mode 100644 src/components/MediaTypeSwitch/__tests__/MediaTypesSwitch.test.tsx create mode 100644 src/components/MediaTypeSwitch/__tests__/fixtures/test-definition.json create mode 100644 src/components/MediaTypeSwitch/index.ts delete mode 100644 src/components/Operation/Operation.tsx create mode 100644 src/components/OperationItem/Description.tsx create mode 100644 src/components/OperationItem/OperationItem.tsx create mode 100644 src/components/OperationItem/__tests__/OperationItem.test.tsx create mode 100644 src/components/OperationItem/__tests__/__mocks__/mock-intersection-observer.ts create mode 100644 src/components/OperationItem/__tests__/fixtures/operationDefinition.json create mode 100644 src/components/OperationItem/__tests__/fixtures/petstore.json create mode 100644 src/components/OperationItem/index.ts create mode 100644 src/components/OperationItem/types.ts delete mode 100644 src/components/OptionsProvider.ts create mode 100644 src/components/Overview/Overview.tsx create mode 100644 src/components/Overview/__tests__/Overview.test.tsx create mode 100644 src/components/Overview/__tests__/__snapshots__/Overview.test.tsx.snap create mode 100644 src/components/Overview/index.ts create mode 100644 src/components/PageFooter/PageFooter.tsx create mode 100644 src/components/PageFooter/index.ts create mode 100644 src/components/Panel/ResponsePanel.ts create mode 100644 src/components/Panel/Trigger.ts create mode 100644 src/components/Panel/index.ts create mode 100644 src/components/PanelItem/PanelItem.tsx create mode 100644 src/components/PanelItem/index.ts create mode 100644 src/components/PanelItem/styled.ts delete mode 100644 src/components/Parameters/Parameters.tsx delete mode 100644 src/components/Parameters/ParametersGroup.tsx create mode 100644 src/components/PayloadSamples/__tests__/Example.test.tsx create mode 100644 src/components/PayloadSamples/__tests__/PayloadSamples.test.tsx create mode 100644 src/components/PayloadSamples/__tests__/__snapshots__/Example.test.tsx.snap create mode 100644 src/components/PayloadSamples/__tests__/fixtures/mediaTypeUrlencoded.json delete mode 100644 src/components/PayloadSamples/exernalExampleHook.ts create mode 100644 src/components/PayloadSamples/index.ts delete mode 100644 src/components/PayloadSamples/styled.elements.ts create mode 100644 src/components/PayloadSamples/styled.ts create mode 100644 src/components/PayloadSamples/types.ts create mode 100644 src/components/PropertyDetails/DescriptionEnums.tsx create mode 100644 src/components/PropertyDetails/EnumValues.tsx create mode 100644 src/components/PropertyDetails/Examples.tsx create mode 100644 src/components/PropertyDetails/Extensions.tsx create mode 100644 src/components/PropertyDetails/FieldDetail.tsx create mode 100644 src/components/PropertyDetails/FieldDetails.tsx create mode 100644 src/components/PropertyDetails/Pattern.tsx create mode 100644 src/components/PropertyDetails/PlusCircleIcon.tsx create mode 100644 src/components/PropertyDetails/PropertyDetails.tsx create mode 100644 src/components/PropertyDetails/SchemaTypeInfo.tsx create mode 100644 src/components/PropertyDetails/SimpleEnums.tsx create mode 100644 src/components/PropertyDetails/__tests__/Extensions.test.tsx create mode 100644 src/components/PropertyDetails/__tests__/FieldDetail.test.tsx create mode 100644 src/components/PropertyDetails/__tests__/FieldDetails.test.tsx create mode 100644 src/components/PropertyDetails/__tests__/PropertyDetails.test.tsx create mode 100644 src/components/PropertyDetails/__tests__/cycleColorsByLevel.test.ts create mode 100644 src/components/PropertyDetails/__tests__/fixtures/fields.json create mode 100644 src/components/PropertyDetails/cycleColorsByLevel.ts create mode 100644 src/components/PropertyDetails/index.ts create mode 100644 src/components/PropertyDetails/styled.ts create mode 100644 src/components/PropertyDetails/types.ts delete mode 100644 src/components/Redoc/Redoc.tsx delete mode 100644 src/components/Redoc/styled.elements.tsx delete mode 100644 src/components/RedocStandalone.tsx create mode 100644 src/components/RedoclyOpenAPIDocs/Error.tsx create mode 100644 src/components/RedoclyOpenAPIDocs/ErrorBoundary.tsx create mode 100644 src/components/RedoclyOpenAPIDocs/Providers.tsx create mode 100644 src/components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocs.tsx create mode 100644 src/components/RedoclyOpenAPIDocs/RedoclyOpenAPIDocsStandalone.tsx create mode 100644 src/components/RedoclyOpenAPIDocs/__tests__/AppProvider.test.tsx create mode 100644 src/components/RedoclyOpenAPIDocs/__tests__/RedoclyOpenAPIDocs.test.tsx create mode 100644 src/components/RedoclyOpenAPIDocs/index.ts create mode 100644 src/components/RedoclyOpenAPIDocs/styled.tsx create mode 100644 src/components/RedoclyOpenAPIDocs/types.ts create mode 100644 src/components/RedoclyOpenAPIDocs/utils.ts create mode 100644 src/components/RenderHook/RenderHook.tsx create mode 100644 src/components/RenderHook/__tests__/RenderHook.test.tsx create mode 100644 src/components/RenderHook/index.ts create mode 100644 src/components/Request/RequestDetails.tsx create mode 100644 src/components/Request/types.ts create mode 100644 src/components/RequestParameters/Body.tsx create mode 100644 src/components/RequestParameters/ParametersGroup.tsx create mode 100644 src/components/RequestParameters/RequestParameters.tsx create mode 100644 src/components/RequestParameters/index.ts create mode 100644 src/components/RequestSamples/CodeSample.tsx create mode 100644 src/components/RequestSamples/Example.tsx create mode 100644 src/components/RequestSamples/__tests__/RequestSamples.test.tsx create mode 100644 src/components/RequestSamples/__tests__/fixtures/operationDefinition.json create mode 100644 src/components/RequestSamples/__tests__/fixtures/petstore.json create mode 100644 src/components/RequestSamples/__tests__/fixtures/test-definition.json create mode 100644 src/components/RequestSamples/__tests__/useCodeSamples.test.ts create mode 100644 src/components/RequestSamples/index.ts create mode 100644 src/components/RequestSamples/useCodeSamples.ts create mode 100644 src/components/ResponseSamples/Summary.tsx create mode 100644 src/components/ResponseSamples/__tests__/ResponseSamples.test.tsx create mode 100644 src/components/ResponseSamples/__tests__/fixtures/museum.json create mode 100644 src/components/ResponseSamples/__tests__/fixtures/operationDefinitionWithContent.json create mode 100644 src/components/ResponseSamples/__tests__/fixtures/operationDefinitionWithoutContent.json create mode 100644 src/components/ResponseSamples/index.ts create mode 100644 src/components/Responses/OperationResponseList.tsx delete mode 100644 src/components/Responses/Response.tsx delete mode 100644 src/components/Responses/ResponseTitle.tsx delete mode 100644 src/components/Responses/ResponsesList.tsx create mode 100644 src/components/Responses/__tests__/ResponseDetails.test.tsx create mode 100644 src/components/Responses/__tests__/ResponsesHeaders.test.tsx create mode 100644 src/components/Responses/index.ts delete mode 100644 src/components/Responses/styled.elements.ts create mode 100644 src/components/Responses/styled.ts create mode 100644 src/components/Responses/types.ts create mode 100644 src/components/RightPanel/RightPanel.tsx create mode 100644 src/components/RightPanel/index.ts create mode 100644 src/components/Samples/ExampleSwitch.tsx create mode 100644 src/components/Samples/index.ts create mode 100644 src/components/Samples/use-example-key.ts delete mode 100644 src/components/Schema/DiscriminatorDropdown.tsx create mode 100644 src/components/Schema/SubSchema.tsx create mode 100644 src/components/Schema/__tests__/ArraySchema.test.tsx create mode 100644 src/components/Schema/__tests__/ObjectSchema.test.tsx create mode 100644 src/components/Schema/__tests__/OneOfSchema.test.tsx create mode 100644 src/components/Schema/__tests__/Schema.test.tsx create mode 100644 src/components/Schema/__tests__/fixtures/oneOfWithDiscriminator.json create mode 100644 src/components/Schema/__tests__/fixtures/requiredField.json create mode 100644 src/components/Schema/__tests__/fixtures/schemaExpansionLevel.json create mode 100644 src/components/Schema/__tests__/useOneOfLocationIdx.test.ts create mode 100644 src/components/Schema/helpers.ts create mode 100644 src/components/Schema/types.ts create mode 100644 src/components/Schema/useOneOfLocationIdx.ts create mode 100644 src/components/SchemaDefinition/index.ts create mode 100644 src/components/Search/Search.tsx create mode 100644 src/components/Search/SearchDialog.tsx create mode 100644 src/components/Search/SearchTrigger.tsx create mode 100644 src/components/Search/index.ts delete mode 100644 src/components/SearchBox/SearchBox.tsx delete mode 100644 src/components/SearchBox/styled.elements.tsx create mode 100644 src/components/SectionContent/SectionContent.tsx create mode 100644 src/components/SectionContent/index.ts create mode 100644 src/components/SectionItem/SectionItem.tsx create mode 100644 src/components/SectionItem/index.ts create mode 100644 src/components/Security/Divider.tsx create mode 100644 src/components/Security/OAuthFlow.tsx create mode 100644 src/components/Security/OAuthScopes.tsx create mode 100644 src/components/Security/Security.tsx create mode 100644 src/components/Security/SecurityButton.tsx create mode 100644 src/components/Security/SecurityFlow.tsx create mode 100644 src/components/Security/SecurityModal.tsx create mode 100644 src/components/Security/SecuritySchemeItem.tsx create mode 100644 src/components/Security/__tests__/Security.test.tsx create mode 100644 src/components/Security/__tests__/SecurityButton.test.tsx create mode 100644 src/components/Security/__tests__/SecurityModal.test.tsx create mode 100644 src/components/Security/helper.ts create mode 100644 src/components/Security/index.ts create mode 100644 src/components/Security/styled.ts delete mode 100644 src/components/SecurityRequirement/OAuthFlow.tsx delete mode 100644 src/components/SecurityRequirement/RequiredScopesRow.tsx delete mode 100644 src/components/SecurityRequirement/SecurityDetails.tsx delete mode 100644 src/components/SecurityRequirement/SecurityHeader.tsx delete mode 100644 src/components/SecurityRequirement/SecurityRequirement.tsx delete mode 100644 src/components/SecurityRequirement/styled.elements.ts delete mode 100644 src/components/SecuritySchemes/SecuritySchemes.tsx delete mode 100644 src/components/SeeMore/SeeMore.tsx delete mode 100644 src/components/SelectOnClick/SelectOnClick.tsx create mode 100644 src/components/SelectOrLabel/SelectOrLabel.tsx create mode 100644 src/components/SelectOrLabel/index.ts create mode 100644 src/components/ServerList/ServerDescriptionTooltip.tsx create mode 100644 src/components/ServerList/ServerList.tsx create mode 100644 src/components/ServerList/__tests__/ServerList.test.tsx create mode 100644 src/components/ServerList/index.ts create mode 100644 src/components/ServerList/types.ts create mode 100644 src/components/ServerListDropdown/ServerListDropdown.tsx create mode 100644 src/components/ServerListDropdown/index.ts create mode 100644 src/components/ServerListDropdown/styled.ts delete mode 100644 src/components/SideMenu/Logo.tsx delete mode 100644 src/components/SideMenu/MenuItem.tsx delete mode 100644 src/components/SideMenu/MenuItems.tsx create mode 100644 src/components/SideMenu/hooks/useMenuItems.ts delete mode 100644 src/components/SideMenu/styled.elements.ts create mode 100644 src/components/SideMenu/types.ts delete mode 100644 src/components/SourceCode/SourceCode.tsx rename src/components/StickySidebar/{ChevronSvg.tsx => AnimatedChevronButton.tsx} (87%) create mode 100644 src/components/StickySidebar/FloatingButton.tsx create mode 100644 src/components/StickySidebar/Logo.tsx create mode 100644 src/components/StickySidebar/SidebarActions.tsx create mode 100644 src/components/StickySidebar/__tests__/AnimatedChevronButton.test.tsx create mode 100644 src/components/StickySidebar/__tests__/FloatingButton.test.tsx create mode 100644 src/components/StickySidebar/__tests__/SidebarActions.test.tsx create mode 100644 src/components/StickySidebar/index.ts delete mode 100644 src/components/StoreBuilder.ts create mode 100644 src/components/Tabs/Tabs.tsx create mode 100644 src/components/Tabs/__tests__/Tabs.test.tsx create mode 100644 src/components/Tabs/index.ts create mode 100644 src/components/Tabs/useTabsState.ts create mode 100644 src/components/TagItem/OperationNavigationItems.tsx create mode 100644 src/components/TagItem/OperationsNavigation.tsx create mode 100644 src/components/TagItem/TagItem.tsx create mode 100644 src/components/TagItem/index.ts create mode 100644 src/components/TagItem/styled.ts create mode 100644 src/components/TagItem/types.ts create mode 100644 src/components/ViewNested/ViewNested.tsx create mode 100644 src/components/ViewNested/__tests__/ViewNested.test.tsx create mode 100644 src/components/ViewNested/index.ts delete mode 100644 src/components/__tests__/Callbacks.test.tsx delete mode 100644 src/components/__tests__/DiscriminatorDropdown.test.tsx delete mode 100644 src/components/__tests__/FieldDetails.test.tsx delete mode 100644 src/components/__tests__/JsonViewer.tsx delete mode 100644 src/components/__tests__/OneOfSchema.test.tsx create mode 100644 src/components/__tests__/Samples/ExampleSwitch.test.tsx create mode 100644 src/components/__tests__/Samples/use-example-key.test.ts delete mode 100644 src/components/__tests__/Schema.test.tsx delete mode 100644 src/components/__tests__/SchemaDefinition.test.tsx delete mode 100644 src/components/__tests__/SecurityRequirement.test.tsx delete mode 100644 src/components/__tests__/__snapshots__/DiscriminatorDropdown.test.tsx.snap delete mode 100644 src/components/__tests__/__snapshots__/FieldDetails.test.tsx.snap delete mode 100644 src/components/__tests__/__snapshots__/OneOfSchema.test.tsx.snap delete mode 100644 src/components/__tests__/__snapshots__/SecurityRequirement.test.tsx.snap create mode 100644 src/components/__tests__/common/ClearButton.test.tsx create mode 100644 src/components/__tests__/common/Dropdown.test.tsx create mode 100644 src/components/__tests__/common/__snapshots__/ClearButton.test.tsx.snap create mode 100644 src/components/__tests__/common/__snapshots__/Dropdown.test.tsx.snap delete mode 100644 src/components/__tests__/fixtures/simple-security-fixture.json create mode 100644 src/components/__tests__/mocks/examples.ts create mode 100644 src/components/common/Badges.tsx create mode 100644 src/components/common/BodyContent/BodyContent.tsx create mode 100644 src/components/common/BodyContent/index.ts create mode 100644 src/components/common/ClearButton/ClearButton.tsx create mode 100644 src/components/common/ClearButton/index.ts create mode 100644 src/components/common/ClearButton/styled.ts create mode 100644 src/components/common/ClearButton/types.ts create mode 100644 src/components/common/CodeBlockPanel.tsx create mode 100644 src/components/common/ConstraintsView.tsx create mode 100644 src/components/common/Dropdown/Dropdown.tsx create mode 100644 src/components/common/Dropdown/index.ts create mode 100644 src/components/common/ExpandableExample/ExpandableExample.tsx create mode 100644 src/components/common/ExpandableExample/index.ts create mode 100644 src/components/common/Extensions.tsx create mode 100644 src/components/common/Fields/fields-layout.ts create mode 100644 src/components/common/Fields/fields.ts create mode 100644 src/components/common/Fields/index.ts create mode 100644 src/components/common/LinkToField.tsx create mode 100644 src/components/common/OperationItemTitle.ts create mode 100644 src/components/common/SchemaSelection/SchemaSelection.tsx create mode 100644 src/components/common/SchemaSelection/index.ts create mode 100644 src/components/common/Select/Select.tsx create mode 100644 src/components/common/Select/index.ts create mode 100644 src/components/common/Select/styled.ts create mode 100644 src/components/common/Select/types.ts create mode 100644 src/components/common/Skeleton/LanguageListSkeleton.tsx create mode 100644 src/components/common/Skeleton/Skeleton.tsx create mode 100644 src/components/common/Skeleton/index.ts create mode 100644 src/components/common/__tests__/Dropdown.test.tsx create mode 100644 src/components/common/__tests__/LinkToField.test.tsx create mode 100644 src/components/common/__tests__/fixtures/simpleOpenAPI.json create mode 100644 src/components/common/headers.ts create mode 100644 src/components/common/index.ts create mode 100644 src/components/common/linkify.tsx create mode 100644 src/components/common/mixins.ts create mode 100644 src/components/common/panels.ts create mode 100644 src/components/common/schema.ts create mode 100644 src/components/common/styled.ts delete mode 100644 src/components/testProviders.tsx create mode 100644 src/constants.ts create mode 100644 src/custom.d.ts create mode 100644 src/hoc/types.ts create mode 100644 src/hoc/utils.ts create mode 100644 src/hoc/withRouter.tsx create mode 100644 src/hoc/withStore.tsx rename src/{utils => hooks}/highlight.ts (80%) create mode 100644 src/hooks/index.ts create mode 100644 src/hooks/useActivateExample.ts create mode 100644 src/hooks/useActiveWithFallback.ts create mode 100644 src/hooks/useContentItems.ts create mode 100644 src/hooks/useIsMobile.ts create mode 100644 src/hooks/useLocation.ts create mode 100644 src/hooks/usePerformanceMetrics.ts create mode 100644 src/hooks/useRouter.ts create mode 100644 src/hooks/useSearch.ts create mode 100644 src/hooks/useTelemetry.ts create mode 100644 src/hooks/useTranslate.ts create mode 100644 src/icons/CSharpIcon/CSharpIcon.tsx create mode 100644 src/icons/CSharpIcon/index.ts create mode 100644 src/icons/CurlIcon/CurlIcon.tsx create mode 100644 src/icons/CurlIcon/index.ts create mode 100644 src/icons/GOIcon/GOIcon.tsx create mode 100644 src/icons/GOIcon/index.ts create mode 100644 src/icons/JavaIcon/JavaIcon.tsx create mode 100644 src/icons/JavaIcon/index.ts create mode 100644 src/icons/JavaScriptIcon/JavaScriptIcon.tsx create mode 100644 src/icons/JavaScriptIcon/index.ts create mode 100644 src/icons/NodeJSIcon/NodeJSIcon.tsx create mode 100644 src/icons/NodeJSIcon/index.ts create mode 100644 src/icons/PHPIcon/PHPIcon.tsx create mode 100644 src/icons/PHPIcon/index.ts create mode 100644 src/icons/PayloadIcon/PayloadIcon.tsx create mode 100644 src/icons/PayloadIcon/index.ts create mode 100644 src/icons/PythonIcon/PythonIcon.tsx create mode 100644 src/icons/PythonIcon/index.ts create mode 100644 src/icons/RIcon/RIcon.tsx create mode 100644 src/icons/RIcon/index.ts create mode 100644 src/icons/RubyIcon/RubyIcon.tsx create mode 100644 src/icons/RubyIcon/index.ts create mode 100644 src/jotai/app.ts create mode 100644 src/jotai/operation.ts create mode 100644 src/jotai/store.ts create mode 100644 src/jotai/telemetry.ts create mode 100644 src/jotai/use-write-atom.ts create mode 100644 src/models/__tests__/Callback.test.ts rename src/{services/__tests__/models => models/__tests__}/FieldModel.test.ts (65%) create mode 100644 src/models/__tests__/MediaContent.test.ts create mode 100644 src/models/__tests__/Operation.test.ts create mode 100644 src/models/__tests__/Response.test.ts rename src/{services/__tests__/models => models/__tests__}/Schema.circular.test.ts (75%) create mode 100644 src/models/__tests__/Schema.test.ts rename src/{services/__tests__/models => models/__tests__}/__snapshots__/Schema.test.ts.snap (82%) rename src/{services => models}/__tests__/fixtures/3.1/conditionalField.json (100%) rename src/{services => models}/__tests__/fixtures/3.1/conditionalSchema.json (100%) rename src/{services => models}/__tests__/fixtures/3.1/patternProperties.json (92%) rename src/{services => models}/__tests__/fixtures/3.1/prefixItems.json (100%) rename src/{services => models}/__tests__/fixtures/arrayItems.json (100%) create mode 100644 src/models/__tests__/fixtures/callback.json rename src/{services => models}/__tests__/fixtures/discriminator.json (92%) create mode 100644 src/models/__tests__/fixtures/fields.json rename src/{services => models}/__tests__/fixtures/nestedEnumDescroptionSample.json (100%) create mode 100644 src/models/__tests__/fixtures/oneOfTitles.json create mode 100644 src/models/__tests__/fixtures/operation/noRequestOperationDefinition.json create mode 100644 src/models/__tests__/fixtures/operation/operationDefinition.json create mode 100644 src/models/__tests__/fixtures/operation/petstore.json rename src/{services/__tests__/models => models/__tests__}/helpers.ts (80%) rename src/{services/__tests__/models/RequestBody.test.ts => models/__tests__/request.test.ts} (69%) create mode 100644 src/models/callback.ts create mode 100644 src/models/code-sample-options.ts create mode 100644 src/models/example.ts create mode 100644 src/models/field.ts create mode 100644 src/models/group.ts create mode 100644 src/models/index.ts create mode 100644 src/models/mediaContent.ts create mode 100644 src/models/mediaType.ts create mode 100644 src/models/operation.ts create mode 100644 src/models/request.ts create mode 100644 src/models/response.ts create mode 100644 src/models/schema.ts create mode 100644 src/models/security.ts create mode 100644 src/models/tab.ts create mode 100644 src/models/types.ts delete mode 100644 src/polyfills.ts delete mode 100644 src/services/AppStore.ts delete mode 100644 src/services/ClipboardService.ts delete mode 100644 src/services/HistoryService.ts delete mode 100644 src/services/Labels.ts delete mode 100644 src/services/MarkdownRenderer.ts delete mode 100644 src/services/MarkerService.ts delete mode 100644 src/services/MenuBuilder.ts delete mode 100644 src/services/MenuStore.ts delete mode 100644 src/services/RedocNormalizedOptions.ts delete mode 100644 src/services/ScrollService.ts delete mode 100644 src/services/SearchStore.ts delete mode 100644 src/services/SearchWorker.worker.ts delete mode 100644 src/services/SpecStore.ts delete mode 100644 src/services/__tests__/MarkdownRenderer.test.ts delete mode 100644 src/services/__tests__/MarkerService.test.ts delete mode 100644 src/services/__tests__/__snapshots__/prism.test.ts.snap create mode 100644 src/services/__tests__/check.test.ts delete mode 100644 src/services/__tests__/fixtures/3.1/schemaDefinition.json delete mode 100644 src/services/__tests__/fixtures/3.1/unevaluatedProperties.json create mode 100644 src/services/__tests__/fixtures/allOfSelfReferencingArray.json delete mode 100644 src/services/__tests__/fixtures/callback.json delete mode 100644 src/services/__tests__/fixtures/fields.json delete mode 100644 src/services/__tests__/fixtures/oneOfTitles.json create mode 100644 src/services/__tests__/fixtures/petstore.yaml delete mode 100644 src/services/__tests__/history.service.test.ts delete mode 100644 src/services/__tests__/models/ApiInfo.test.ts delete mode 100644 src/services/__tests__/models/Callback.test.ts delete mode 100644 src/services/__tests__/models/MenuBuilder.test.ts delete mode 100644 src/services/__tests__/models/Response.test.ts delete mode 100644 src/services/__tests__/models/Schema.test.ts delete mode 100644 src/services/__tests__/prism.test.ts create mode 100644 src/services/__tests__/telemetry.test.ts create mode 100644 src/services/__tests__/utils.test.ts create mode 100644 src/services/check.ts create mode 100644 src/services/code-samples/constants.ts create mode 100644 src/services/code-samples/generator.ts create mode 100644 src/services/code-samples/index.ts create mode 100644 src/services/code-samples/types.ts create mode 100644 src/services/config-options/__tests__/helpers.test.ts create mode 100644 src/services/config-options/helpers.ts create mode 100644 src/services/config-options/index.ts create mode 100644 src/services/config-options/normalizeOptions.ts create mode 100644 src/services/config-options/types.ts create mode 100644 src/services/history/__tests__/helpers.test.ts create mode 100644 src/services/history/helpers.ts create mode 100644 src/services/history/index.ts create mode 100644 src/services/menu/__tests__/builder.test.ts rename src/services/{__tests__/fixtures/3.1 => menu/__tests__/fixtures}/pathItems.json (93%) create mode 100644 src/services/menu/builder.ts create mode 100644 src/services/menu/index.ts create mode 100644 src/services/menu/markdown.ts create mode 100644 src/services/menu/operation.ts create mode 100644 src/services/menu/tags.ts delete mode 100644 src/services/models/ApiInfo.ts delete mode 100644 src/services/models/Callback.ts delete mode 100644 src/services/models/Example.ts delete mode 100644 src/services/models/Field.ts delete mode 100644 src/services/models/Group.model.ts delete mode 100644 src/services/models/MediaContent.ts delete mode 100644 src/services/models/MediaType.ts delete mode 100644 src/services/models/Operation.ts delete mode 100644 src/services/models/RequestBody.ts delete mode 100644 src/services/models/Response.ts delete mode 100644 src/services/models/Schema.ts delete mode 100644 src/services/models/SecurityRequirement.ts delete mode 100644 src/services/models/SecuritySchemes.ts delete mode 100644 src/services/models/Webhook.ts delete mode 100644 src/services/models/index.ts create mode 100644 src/services/search/engine.ts create mode 100644 src/services/search/init.ts create mode 100644 src/services/search/types.ts create mode 100644 src/services/telemetry.ts create mode 100644 src/services/utils.ts create mode 100644 src/testProviders.tsx delete mode 100644 src/theme.ts create mode 100644 src/types/app.ts create mode 100644 src/types/security.ts create mode 100644 src/utils/__tests__/__snapshots__/simplifyAstStructure.test.ts.snap create mode 100644 src/utils/__tests__/areArraysEqual.test.ts create mode 100644 src/utils/__tests__/argValuesHelpers.ts create mode 100644 src/utils/__tests__/convertSwagger2OpenAPI.test.ts create mode 100644 src/utils/__tests__/debounce.test.ts create mode 100644 src/utils/__tests__/debug.test.ts create mode 100644 src/utils/__tests__/dom.test.ts create mode 100644 src/utils/__tests__/hasNestedFields.test.ts create mode 100644 src/utils/__tests__/isMobile.test.ts create mode 100644 src/utils/__tests__/local-storage.test.ts create mode 100644 src/utils/__tests__/path.test.ts create mode 100644 src/utils/__tests__/queryString.test.ts create mode 100644 src/utils/__tests__/replaceVariables.test.ts create mode 100644 src/utils/__tests__/simplifyAstStructure.test.ts create mode 100644 src/utils/__tests__/sort.test.ts create mode 100644 src/utils/__tests__/string.test.ts create mode 100644 src/utils/__tests__/theme-helpers.test.ts create mode 100644 src/utils/__tests__/url.test.ts create mode 100644 src/utils/areArraysEqual.ts create mode 100644 src/utils/argValuesHelpers.ts create mode 100644 src/utils/compose.ts create mode 100644 src/utils/convertSwagger2OpenAPI.ts create mode 100644 src/utils/cookies.ts create mode 100644 src/utils/debounce.ts delete mode 100644 src/utils/decorators.ts create mode 100644 src/utils/environments.ts create mode 100644 src/utils/hasNestedFields.ts create mode 100644 src/utils/isMobile.ts delete mode 100644 src/utils/jsonToHtml.ts create mode 100644 src/utils/local-storage.ts create mode 100644 src/utils/mcp.ts delete mode 100644 src/utils/memoize.ts create mode 100644 src/utils/menu.ts create mode 100644 src/utils/parameters.ts create mode 100644 src/utils/path.ts create mode 100644 src/utils/queryString.ts create mode 100644 src/utils/removeMarkdownLinks.ts create mode 100644 src/utils/replaceVariables.ts create mode 100644 src/utils/saveTextBeforeHeading.ts create mode 100644 src/utils/security-details.ts create mode 100644 src/utils/session-storage.ts create mode 100644 src/utils/simplifyAstStructure.ts create mode 100644 src/utils/string.ts create mode 100644 src/utils/stripFormatting.ts create mode 100644 src/utils/theme-helpers.ts create mode 100644 src/utils/url.ts delete mode 100644 tsconfig.lib.json delete mode 100644 tslint.json delete mode 100644 typings/styled-patch.d.ts create mode 100644 vite.config.ts delete mode 100644 webpack.config.ts diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 00000000..7680bc0e --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@2.2.0/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [["redoc"]], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch" +} diff --git a/.dockerignore b/.dockerignore index 9f8029b3..76f94e9f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,12 +1,8 @@ * !src/ -!config -!demo/favicon.png - -!custom.d.ts -!typings/styled-patch.d.ts -!tsconfig.json -!webpack.config.ts - +!scripts/ !package.json !package-lock.json +!vite.config.ts +!tsconfig.json +!config/ diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 42c2e0b1..00000000 --- a/.editorconfig +++ /dev/null @@ -1,10 +0,0 @@ -root = true - -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 94d167b8..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,54 +0,0 @@ -module.exports = { - env: { - browser: true, - }, - parser: '@typescript-eslint/parser', - extends: ['plugin:react/recommended', 'plugin:@typescript-eslint/recommended'], - parserOptions: { - project: 'tsconfig.json', - sourceType: 'module', - createDefaultProgram: true, - ecmaFeatures: { - jsx: true, - }, - }, - settings: { - react: { - version: 'detect', - }, - }, - plugins: ['react', 'react-hooks', '@typescript-eslint', 'import'], - rules: { - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/interface-name-prefix': 'off', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/ban-ts-ignore': 'off', - '@typescript-eslint/ban-types': ['error', { types: { object: false }, extendDefaults: true }], - '@typescript-eslint/no-var-requires': 'off', - - 'react/prop-types': 'off', - 'react-hooks/rules-of-hooks': 'error', - 'react-hooks/exhaustive-deps': 'warn', - - 'import/no-extraneous-dependencies': 'error', - 'import/no-internal-modules': [ - 'error', - { - allow: [ - 'prismjs/**', - 'perfect-scrollbar/**', - 'react-dom/*', - 'core-js/**', - 'memoize-one/**', - 'unfetch/**', - 'raf/polyfill', - '**/fixtures/**', // for tests - ], - }, - ], - }, -}; diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index bfeb0d2c..7a8de1a5 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1 @@ -* @Redocly/keyboard-warriors -/docs/ @Redocly/technical-writers \ No newline at end of file +* @Redocly/keyboard-warriors \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index ea300447..28431a80 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -20,11 +20,11 @@ Before submitting a pull request, please make sure the following is done: 2. Run `npm install` in the repository root. 3. If you’ve fixed a bug or added code that should be tested, add tests! 4. Ensure the test suite passes (`npm test`). Tip: `npm test -- --watch TestName` is helpful in development. -5. Format your code with prettier (`npm run prettier`). +5. Lint your code with eslint (`npm run lint`). ## Development Setup -You need [Node.js](http://nodejs.org) at `v12.0.0+`. +You need [Node.js](http://nodejs.org) at `Node LTS+`. After cloning the repo, run: @@ -38,14 +38,11 @@ $ npm install # or npm # dev-server, watch and auto reload playground $ npm start -# start playground app in production environment -$ npm run start:prod - -# runt tslint +# run tslint $ npm run lint # try autofix tslint issues -$ npm run lint -- --fix +$ npm run lint:fix # run unit tests $ npm run unit @@ -53,46 +50,37 @@ $ npm run unit # run e2e tests $ npm run e2e # Make sure you have created bundle before running e2e test -# E.g. run `npm run bundle` and wait for the finishing process. +# E.g. run `npm run build` and wait for the finishing process. -# open cypress UI to debug e2e test -$ npm run cy:open +# open Playwright UI to debug e2e test +$ npm run e2e:ui # run the unit tests (includes linting and license checks) $ npm test # prepare bundles -$ npm run bundle +$ npm run build -# format the code using prettier -$ npm run prettier - -# auto-generate changelog -$ npm run changelog ``` There are some other scripts available in the `scripts` section of the `package.json` file. ## Project Structure -- **`benchmark`**: contains basic perf benchmark. Not fully ready yet +- **`examples`**: contains project demos -- **`demo`**: contains project demo with demo specs and HMR playground used in development - - - `demo/playground`: HMR Playground used in development +- **`playground`**: HMR Playground used in development - **`docs`**: contains extra docs (linked from README.md) -- **`e2e`**: contains e2e tests. The e2e tests are written and run with [Cypress](https://www.cypress.io/). +- **`playwright`**: contains e2e tests. The e2e tests are written and run with [Playwright](https://playwright.dev/). +- **`src`**: contains the source code. The codebase is written in Typescript. CSS styles are managed with [Styled components](https://www.styled-components.com/). State is managed by [Jotai](https://github.com/pmndrs/jotai) -- **`src`**: contains the source code. The codebase is written in Typescript. CSS styles are managed with [Styled components](https://www.styled-components.com/). State is managed by [MobX](https://github.com/mobxjs/mobx) - - - **`src/common-elements`**: contains common Styled elements or components used in multiple places - **`src/components`**: contains main visual components - - **`src/services`**: contains different services used by Redoc including MobX stores - - **`src/services/models`**: contains classes for OpenAPI entities (e.g. Response, Operations, etc) + - **`src/services`**: contains different services used by Redoc including Jotai stores + - **`src/models`**: contains classes for OpenAPI entities (e.g. Response, Operations, etc) - **`src/types`**: contains extra typescript typings including OpenAPI doc typings - **`src/utils`**: utility functions - - **`src/styled-components.ts`**: - reexports styled-components with proper typescript annotations using theme - - **`src/theme.ts`**: - default theme (colors, fonts, etc) used by all the components + - **`src/jotai`**: - contains Jotai store files + - **`src/hooks`**: - contains global react hooks for application \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 5443302c..da4b7991 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -15,8 +15,12 @@ A clear and concise description of what you expected to happen. **Minimal reproducible OpenAPI snippet(if possible)** + +**Version (of Redoc, Node, OS, Browser)** + + **Screenshots** If applicable, add screenshots to help explain your problem. **Additional context** -Add any other context about the problem here. +Add any other context about the problem here. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 76cde648..c6f63f3e 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -17,4 +17,4 @@ A clear and concise description of what you want to happen. A clear and concise description of any alternative solutions or features you've considered. **Additional context** -Add any other context or screenshots about the feature request here. +Add any other context or screenshots about the feature request here. \ No newline at end of file diff --git a/.github/actions/get-package-version/action.yml b/.github/actions/get-package-version/action.yml new file mode 100644 index 00000000..ff3f49f0 --- /dev/null +++ b/.github/actions/get-package-version/action.yml @@ -0,0 +1,14 @@ +name: Get version from package.json +description: Get version from package.json +outputs: + value: + description: "Version from package.json" + value: ${{ steps.package_version.outputs.value }} +runs: + using: composite + steps: + - name: Get version + shell: bash + id: package_version + run: | + echo "value=$(jq -r .version package.json)" >> "$GITHUB_OUTPUT" diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml new file mode 100644 index 00000000..ccb09dc0 --- /dev/null +++ b/.github/actions/setup-node/action.yml @@ -0,0 +1,21 @@ +name: Node setup +description: Setup Node +runs: + using: composite + steps: + - name: 🚀 Starting Node setup + shell: bash + run: | + echo -e "\033[32m----- setup Node started -----\033[0m" + echo "START_TIME=$(date +%s)" >> $GITHUB_ENV + - name: 📦 Install Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 22.17.1 + cache: npm + - name: ✅ Finished Node setup + shell: bash + run: | + END_TIME=$(date +%s) + DURATION=$((END_TIME - START_TIME)) + echo -e "\033[32m----- setup Node finished in ${DURATION}s -----\033[0m" diff --git a/.github/actions/setup-playwright/action.yml b/.github/actions/setup-playwright/action.yml new file mode 100644 index 00000000..33078401 --- /dev/null +++ b/.github/actions/setup-playwright/action.yml @@ -0,0 +1,36 @@ +name: Playwright setup +description: Setup Playwright + +runs: + using: composite + steps: + - name: 🚀 Starting Playwright setup + shell: bash + run: | + echo -e "\033[32m----- setup Playwright started -----\033[0m" + echo "START_TIME=$(date +%s)" >> $GITHUB_ENV + - name: Get Playwright version + id: playwright-version + shell: bash + run: | + echo "PLAYWRIGHT_VERSION=$(jq -r '.devDependencies["@playwright/test"]' package.json)" >> $GITHUB_OUTPUT + - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + name: Check if Playwright browser is cached + id: playwright-cache + with: + path: ${{ runner.os == 'Windows' && 'C:\Users\runneradmin\AppData\Local\ms-playwright' || runner.os == 'Linux' && '~/.cache/ms-playwright' || runner.os == 'macOS' && '~/Library/Caches/ms-playwright' || '' }} + key: ${{ runner.os }}-Playwright-${{steps.playwright-version.outputs.PLAYWRIGHT_VERSION}} + - name: 📦 Install Playwright browser if not cached + if: steps.playwright-cache.outputs.cache-hit != 'true' + shell: bash + run: | + echo "Installing Playwright in root" + echo "Installing @playwright/test@${{ steps.playwright-version.outputs.PLAYWRIGHT_VERSION }} (no-save)" + npm install -D @playwright/test@${{ steps.playwright-version.outputs.PLAYWRIGHT_VERSION }} --no-save + npx playwright install --with-deps + - name: ✅ Finished Playwright setup + shell: bash + run: | + END_TIME=$(date +%s) + DURATION=$((END_TIME - START_TIME)) + echo -e "\033[32m----- setup Playwright finished in ${DURATION}s -----\033[0m" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index f4486fd0..f77fc834 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -10,4 +10,4 @@ - [ ] Code is linted - [ ] Tested -- [ ] All new/updated code is covered with tests +- [ ] All new/updated code is covered with tests \ No newline at end of file diff --git a/.github/styles/Rules/BritishEnglish.yml b/.github/styles/Rules/BritishEnglish.yml deleted file mode 100644 index 6c33445f..00000000 --- a/.github/styles/Rules/BritishEnglish.yml +++ /dev/null @@ -1,110 +0,0 @@ -extends: substitution -message: 'Use the US spelling "%s" instead of British "%s".' -link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words -level: error -ignorecase: true -swap: - aeon: eon - aeroplane: airplane - ageing: aging - aluminium: aluminum - anaemia: anemia - anaesthesia: anesthesia - analyse: analyze - annexe: annex - apologise: apologize - behaviour: behavior - busses: buses - calibre: caliber - cancelled: canceled - cancellation: cancelation - catalogue: catalog - categorise: categorize - categorised: categorized - categorises: categorizes - categorising: categorizing - centre: center - cheque: check - civilisation: civilization - civilise: civilize - colour: color - cosy: cozy - cypher: cipher - dependant: dependent - defence: defense - distil: distill - draught: draft - encyclopaedia: encyclopedia - enquiry: inquiry - enrol: enroll - enrolment: enrollment - enthral: enthrall - expiry: expiration - favourite: favorite - fibre: fiber - fillet: filet - flavour: flavor - furore: furor - fulfil: fulfill - gaol: jail - grey: gray - humour: humor - honour: honor - initialled: initialed - initialling: initialing - instil: instill - jewellery: jewelry - labelling: labeling - labelled: labeled - labour: labor - libellous: libelous - licence: license - likeable: likable - liveable: livable - lustre: luster - manoeuvre: maneuver - marvellous: marvelous - matt: matte - meagre: meager - metre: meter - modelling: modeling - moustache: mustache - neighbour: neighbor - normalise: normalize - offence: offense - organise: organize - organisation: organization - orientated: oriented - paralyse: paralyze - plough: plow - pretence: pretense - programme: program - pyjamas: pajamas - rateable: ratable - realise: realize - recognise: recognize - reconnoitre: reconnoiter - rumour: rumor - sabre: saber - saleable: salable - saltpetre: saltpeter - sceptic: skeptic - sepulchre: sepulcher - signalling: signaling - sizeable: sizable - skilful: skillful - sombre: somber - smoulder: smolder - speciality: specialty - spectre: specter - splendour: splendor - standardise: standardize - standardised: standardized - sulphur: sulfur - theatre: theater - travelled: traveled - traveller: traveler - travelling: traveling - unshakeable: unshakable - wilful: willful - yoghurt: yogurt diff --git a/.github/styles/Rules/FutureTense.yml b/.github/styles/Rules/FutureTense.yml deleted file mode 100644 index 1836c0e8..00000000 --- a/.github/styles/Rules/FutureTense.yml +++ /dev/null @@ -1,10 +0,0 @@ -extends: existence -message: 'Avoid using future tense: "%s". Use present tense instead.' -link: https://intranet.redoc.ly/contributing/documentation-style-guide/#tone-and-audience -ignorecase: true -level: error -raw: - - "(going to( |\n|[[:punct:]])[a-zA-Z]*|" - - "will( |\n|[[:punct:]])[a-zA-Z]*|" - - "won't( |\n|[[:punct:]])[a-zA-Z]*|" - - "[a-zA-Z]*'ll( |\n|[[:punct:]])[a-zA-Z]*)" diff --git a/.github/styles/Rules/HeaderGerunds.yml b/.github/styles/Rules/HeaderGerunds.yml deleted file mode 100644 index ae3650ba..00000000 --- a/.github/styles/Rules/HeaderGerunds.yml +++ /dev/null @@ -1,11 +0,0 @@ -extends: existence -message: 'Do not start headings with with a gerund (ing word). Use an imperative verb instead.' -link: https://intranet.redoc.ly/contributing/documentation-style-guide/#content-organization -level: error -scope: heading -tokens: - - '^\w*ing.*' -exceptions: - - expandSingleSchemaField - - hideLoading - - hideSingleRequestSampleTab diff --git a/.github/styles/Rules/InclusionGenderCulture.yml b/.github/styles/Rules/InclusionGenderCulture.yml deleted file mode 100644 index ea1b653e..00000000 --- a/.github/styles/Rules/InclusionGenderCulture.yml +++ /dev/null @@ -1,16 +0,0 @@ -extends: substitution -message: 'Use inclusive language. Consider "%s" instead of "%s".' -link: https://intranet.redoc.ly/contributing/documentation-style-guide/#grammar-and-syntax -level: error -ignorecase: true -swap: - he: they - his: their - she: they - hers: their - blacklist(?:ed|ing|s)?: blocklist - whitelist(?:ed|ing|s)?: allowlist - master: primary, main - slave: replica - he/she: they - s/he: they diff --git a/.github/styles/Rules/OxfordComma.yml b/.github/styles/Rules/OxfordComma.yml deleted file mode 100644 index 163a5954..00000000 --- a/.github/styles/Rules/OxfordComma.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "Use the Oxford comma in '%s'." -link: https://docs.microsoft.com/en-us/style-guide/punctuation/commas -scope: sentence -level: error -nonword: true -tokens: - - '(?:[^\s,]+,){1,} \w+ (?:and|or) \w+[.?!]' diff --git a/.github/styles/config/vocabularies/Rules/accept.txt b/.github/styles/config/vocabularies/Rules/accept.txt deleted file mode 100644 index 039d46ed..00000000 --- a/.github/styles/config/vocabularies/Rules/accept.txt +++ /dev/null @@ -1,150 +0,0 @@ -[Aa]nsible -[Aa]utostart -[Bb]locklist -[Bb]locklists -[Bb]oolean -[Bb]reakpoint -[B]reakpoints -[Cc]ancelation -[Cc]lassloading -[Cc]hargeback -[Cc]hargebacks -[Cc]he -[Cc]rypto -[Cc]ryptocurrency -[Dd]evfile|[Dd]evfiles -[Dd]ownstream -[Dd]ownstreaming -[Ff]actories|[Ff]actory -[Gg]it -[Gg]rafana -[Hh]eatmap -[Hh]elm -[Hh]ostname -[Ii]tem -[Jj]etbrains -[Kk]eycloak -[Ll]iveness -[Ll]ombok -[Ll]oopback -[Mm]aven -[Mm]inikube -[Mm]inishift -[Mm]ixin|[Mm]ixins -[Mm]odularization -[Mm]ulticluster -[Mm]ultihost -[Mm]ultinode -[Mm]ultitenant -[Mm]ultiuser -[Mm]ultizone -[Nn]amespace|[Nn]amespaces -[Nn]etcoredebug[Oo]utput -[Nn]ginx -[Oo]nboarding -[Pp]podman -[Pp]reconfigured -[Rr]eadonly -[Rr]epresentment -[Rr]ollout|[Rr]ollouts -[Rr]untime|[Rr]untimes -[Ss]erializer -[Ss]erverless -[Ss]ubnetwork -[Ss]ubpath|[Ss]ubpaths -[Tt]heia -[Tt]olerations -[Tt]ruststore -[Uu]ninstallation -[Uu]nstaged -[Uu]ntrusted -[Ww]orkspace|[Ww]orkspaces -[Yy]eoman -\.NET -adoc -Antora -API -Apigee -AsciiDoc -AWS|aws -Azure -Bierner -Bitbucket -btn -Btrfs -CentOS -Ceph -Che-Theia -CLI -ConfigMap|ConfigMaps -Ctrl -DaemonSet -Dev Workspace -Developer Perspective -DNS -Docker -Dockerfile -Dotnet -Endevor -endif -GitHub|github -GitLab -Gluster -Gradle -Grafana -GUI -HTTPS|https -I/O -IDE|ide|IDEs -Intelephense -IntelliJ IDEA -Java -Java Lombok -JSON|json -JVM|jvm -kbd -Kubespray -Laravel -Let\'s Encrypt -Mattermost -mebibytes -Microsoft Azure -millicores -Mulesoft -MySQL -Netlify -Node.js -npm -NuGet -OAuth -ocp -OmniSharp -OpenShift -OpenTracing -Operator -OperatorHub -OpenAPI -osd -PHP -PostgreSQL -Quarkus -Rebilly -Redoc -Redocly -Redocly-cli -SCM -Sharding -SonarLint -Spring Boot -SVG -Uber -URI|URIs -URL|url|URLs -Velero -Vercel -Visual Studio Code -vsix -Webview|Webviews -Woopra -YAML|yaml -Zowe diff --git a/.github/styles/config/vocabularies/Rules/reject.txt b/.github/styles/config/vocabularies/Rules/reject.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 00000000..c621f301 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,48 @@ +name: Build and Publish Docker container on Dockerhub +on: + workflow_call: + secrets: + DOCKERHUB_USERNAME: + description: 'DockerHub username' + required: true + DOCKERHUB_TOKEN: + description: 'DockerHub token' + required: true +permissions: + contents: read +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Get package version + id: get_version + uses: ./.github/actions/get-package-version + - name: Docker meta + id: docker_meta + uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0 + with: + images: | + redocly/redoc + tags: | + ${{ steps.get_version.outputs.value }} + latest + - name: Set up QEMU + uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 + - name: Login to DockerHub + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + with: + context: . + file: ./config/docker/Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} diff --git a/.github/workflows/docs-tests.yaml b/.github/workflows/docs-tests.yaml deleted file mode 100644 index 66729455..00000000 --- a/.github/workflows/docs-tests.yaml +++ /dev/null @@ -1,37 +0,0 @@ -name: Documentation tests -on: - pull_request: - types: [opened, synchronize, reopened] - -jobs: - markdownlint: - name: markdownlint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: DavidAnson/markdownlint-cli2-action@v15 - with: - config: .markdownlint.yaml - globs: | - docs/**/*.md - README.md - - vale: - name: vale action - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: errata-ai/vale-action@reviewdog - with: - files: '["README.md", "docs"]' - filter_mode: file - - linkcheck: - runs-on: ubuntu-latest - steps: - - name: Checkout Repository - uses: actions/checkout@v4 - - name: Markup Link Checker (mlc) - uses: becheran/mlc@v0.16.1 - with: - args: ./docs diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml deleted file mode 100644 index 40a678fc..00000000 --- a/.github/workflows/e2e-tests.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: Tests e2e - -on: [push] - -jobs: - build-and-e2e: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - run: npm ci - - run: npm run bundle - - run: npm run e2e diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml new file mode 100644 index 00000000..178fffb2 --- /dev/null +++ b/.github/workflows/e2e.yml @@ -0,0 +1,29 @@ +name: Tests e2e + +permissions: + contents: read + +on: + pull_request: + branches: + - main + +jobs: + build-and-e2e: + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - name: Setup Node.js + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 22.17 + cache: 'npm' + - name: Install Dependencies + run: npm ci --ignore-scripts --no-fund + - name: Bundle + run: npm run build:standalone + - name: Prepare Playwright + uses: ./.github/actions/setup-playwright + - name: Run e2e tests + run: npm run e2e:prepare && npm run e2e diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 54796508..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Publish Docker image -on: - release: - types: [published] -jobs: - dockerhub: - name: Publish redoc image to DockerHub - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Docker meta - id: docker_meta - uses: crazy-max/ghaction-docker-meta@v1 - with: - images: redocly/redoc - - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v3 - with: - context: . - file: ./config/docker/Dockerfile - platforms: linux/amd64,linux/arm64 - push: true - tags: ${{ steps.docker_meta.outputs.tags }} - labels: ${{ steps.docker_meta.outputs.labels }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index e4bc75f0..00000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,132 +0,0 @@ -name: Publish - -on: - push: - branches: [main] - -jobs: - bundle: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - - name: Cache node modules - uses: actions/cache@v3 - with: - path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS - key: npm-${{ hashFiles('package-lock.json') }} - restore-keys: | - npm-${{ hashFiles('package-lock.json') }} - npm- - - run: npm ci - - run: npm run bundle - - name: Store bundle artifact - uses: actions/upload-artifact@v4 - with: - name: bundles - path: bundles - retention-days: 1 - unit-tests: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - run: npm ci - - run: npm test - e2e-tests: - needs: [bundle] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - run: npm ci - - name: Download bundled artifact - uses: actions/download-artifact@v4 - with: - name: bundles - path: bundles - - run: npm run e2e - check-version: - name: Check Version - runs-on: ubuntu-latest - needs: [bundle, unit-tests, e2e-tests] - outputs: - changed: ${{ steps.check.outputs.changed }} - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Set up Node.js - uses: actions/setup-node@v3 - - name: Check if version has been updated - id: check - uses: EndBug/version-check@v2.0.1 - with: - file-url: https://cdn.jsdelivr.net/npm/redoc/package.json - static-checking: localIsNew - publish: - name: Publish to NPM - needs: [check-version] - if: needs.check-version.outputs.changed == 'true' - runs-on: ubuntu-latest - steps: - - uses: actions/setup-node@v3 - with: - node-version: '14.x' - registry-url: 'https://registry.npmjs.org' - - uses: actions/checkout@v3 - - name: Download bundled artifacts - uses: actions/download-artifact@v4 - with: - name: bundles - path: bundles - - name: Cache node modules - uses: actions/cache@v3 - with: - path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS - key: npm-${{ hashFiles('package-lock.json') }} - restore-keys: | - npm-${{ hashFiles('package-lock.json') }} - npm- - - name: Before deploy - run: npm ci && npm run declarations - - name: Publish to NPM - run: npm publish - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - publish-cdn: - name: Publish to CDN - needs: [check-version] - if: needs.check-version.outputs.changed == 'true' - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Configure AWS - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - - name: Download all artifact - uses: actions/download-artifact@v4 - - name: Publish to S3 - run: npm run publish-cdn - - invalidate-cache: - name: Clear cache - runs-on: ubuntu-latest - needs: [check-version, publish, publish-cdn] - if: needs.check-version.outputs.changed == 'true' - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Configure AWS - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - - name: Invalidate cache - run: ./scripts/invalidate-cache.sh - shell: bash - env: - DISTRIBUTION: ${{ secrets.DISTRIBUTION }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..6970f417 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,90 @@ +name: Release + +# permissions: +# id-token: write +# contents: read + +on: + push: + branches: + - main + - v3.0.0 +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + release: + name: Release + runs-on: ubuntu-latest + outputs: + published: ${{ steps.changesets.outputs.published }} + publishedPackages: ${{ steps.changesets.outputs.publishedPackages }} + steps: + - name: Checkout Repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - name: Setup Node.js + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 22.17 + cache: 'npm' + - name: Install Dependencies + run: npm ci + + - name: Create Release Pull Request or Publish to npm + id: changesets + uses: RomanHotsiy/changesets-action@v1 + with: + publish: npm run release + commit: 'chore: 🔖 release new versions' + title: 'chore: 🔖 release new versions' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + dockerhub: + needs: [release] + if: needs.release.outputs.published == 'true' + uses: ./.github/workflows/docker.yml + secrets: + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} + + publish-cdn: + name: Publish to CDN + needs: [release] + if: needs.release.outputs.published == 'true' + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Configure AWS + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: us-east-1 + - name: Download all artifact + uses: actions/download-artifact@v4 + - name: Publish to S3 + run: npm run publish-cdn + + invalidate-cache: + name: Clear cache + runs-on: ubuntu-latest + needs: [release, publish-cdn] + if: needs.release.outputs.published == 'true' + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Configure AWS + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: us-east-1 + - name: Invalidate cache + run: ./scripts/clear-cache.sh + shell: bash + env: + DISTRIBUTION: ${{ secrets.DISTRIBUTION }} \ No newline at end of file diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 6ee20cbc..4ac6d0f6 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -1,12 +1,24 @@ name: Unit Tests -on: [push] +on: + pull_request: + branches: + - main +permissions: + contents: read jobs: build-and-unit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - run: npm ci - - run: npm run bundle - - run: npm test + - name: Checkout Repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - name: Setup Node.js + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 22.17 + cache: 'npm' + - name: Install Dependencies + run: npm ci --ignore-scripts --no-fund + - name: Run unit tests + run: npm run unit diff --git a/.gitignore b/.gitignore index e7f639c0..852dc23a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,39 +1,16 @@ -### Linux ### -*~ - -# KDE directory preferences -.directory -# OS X folder attributes +node_modules +bin +stats.json +scripts/*.pem +scripts/*.pem.pub +lib/ +bundle/ +coverage/ .DS_Store -# Linux trash folder which might appear on any partition or disk -.Trash-* - -demo/dist/ - -### Node ### -# Logs -logs -*.log -npm-debug.log* - -# Dependency directory -# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git -node_modules - -lib/ -stats.json -cypress/ -bundles/ -typings/* -!typings/styled-patch.d.ts - -/benchmark/revisions - -/coverage -.ghpages-tmp -stats.json -yarn.lock -.idea -.vscode -.eslintcache +licenses-list.json +cli-zip +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index d0612ad3..00000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npm run pre-commit diff --git a/.markdownlint.yaml b/.markdownlint.yaml deleted file mode 100644 index ab1a86e5..00000000 --- a/.markdownlint.yaml +++ /dev/null @@ -1,54 +0,0 @@ ---- -# Default rules: https://github.com/github/super-linter/blob/master/TEMPLATES/.markdown-lint.yml - -# Rules by id - -# Unordered list style -MD004: false - -# Unordered list indentation -MD007: - indent: 2 - -MD013: - # TODO: Consider to decrease allowed line length - line_length: 800 - tables: false - -## Allow same headers in siblings -MD024: - siblings_only: true - -# Multiple top level headings in the same document -MD025: - front_matter_title: '' - -# Trailing punctuation in heading -MD026: - punctuation: '.,;:。,;:' - -# Ordered list item prefix -MD029: false - -# Unordered lists inside of ordered lists -MD030: false - -# Inline HTML -MD033: false - -# No bare urls -MD034: false - -# Emphasis used instead of a heading -MD036: false - -# Disable "First line in file should be a top level heading" -# We use uncommon format to add metadata. -# TODO: Consider to use "YAML front matter". -MD041: false - -# Rules by tags -blank_lines: false - -MD046: false -# code-block-style diff --git a/.mlc.toml b/.mlc.toml deleted file mode 100644 index 46b37072..00000000 --- a/.mlc.toml +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore these links, we can't check them from this subproject -ignore-links=["../*", "/docs/*"] -# Path to the root folder used to resolve all relative paths -root-dir="./docs" diff --git a/.npmignore b/.npmignore index 56abd88f..130e7519 100644 --- a/.npmignore +++ b/.npmignore @@ -1,6 +1,3 @@ * -!bundles/* -!typings/**/* !package.json -!README.md -!LICENSE \ No newline at end of file +!bundle/**/*.{js,d.ts} diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index dd449725..00000000 --- a/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -*.md diff --git a/.vale.ini b/.vale.ini deleted file mode 100644 index 5f29d079..00000000 --- a/.vale.ini +++ /dev/null @@ -1,48 +0,0 @@ -# Vale configuration file. -# See: https://docs.errata.ai/vale/config - -# The relative path to the folder containing linting rules (styles). -StylesPath = .github/styles - -# Vocab define the exceptions to use in *all* `BasedOnStyles`. -# spelling-exceptions.txt triggers `Vale.Terms` -# reject.txt triggers `Vale.Avoid` -# See: https://docs.errata.ai/vale/vocab -Vocab = Rules - -# Minimum alert level -# ------------------- -# The minimum alert level in the output (suggestion, warning, or error). -# If integrated into CI, builds fail by default on error-level alerts, unless you run Vale with the --no-exit flag -MinAlertLevel = suggestion - -# IgnoredScopes specifies inline-level HTML tags to ignore. -# These tags may occur in an active scope (unlike SkippedScopes, skipped entirely) but their content still won't raise any alerts. -# Default: ignore `code` and `tt`. -IgnoredScopes = code, tt, img, url, a, body.id -# SkippedScopes specifies block-level HTML tags to ignore. Ignore any content in these scopes. -# Default: ignore `script`, `style`, `pre`, and `figure`. -# For AsciiDoc: by default, listingblock, and literalblock. -SkippedScopes = script, style, pre, figure, code, tt, listingblock, literalblock - -# Rules for matching file types. See: https://docs.errata.ai/vale/scoping - -[formats] -properties = md -mdx = md - -# Rules for .MD, .MDX -[*.{md,mdx}] - -BasedOnStyles = Rules -# Ignore code surrounded by backticks or plus sign, parameters defaults, URLs. -TokenIgnores = (\x60[^\n\x60]+\x60), ([^\n]+=[^\n]*), (\+[^\n]+\+), (http[^\n]+\[) -Vale.Repetition = NO -Vale.SentenceSpacing = NO -Vale.Spelling = NO - -# /End of rules for .MD, .MDX - - -# Process .ini files -[*.ini] diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 54c119f3..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,2354 +0,0 @@ -# [2.5.2](https://github.com/Redocly/redoc/compare/v2.5.1...v2.5.2) (2025-10-15) - - -### Bug Fixes - -* Bumped `openapi-sampler` dependency to include the fix for `readOnly`/`writeOnly` handling in allOf. - - -# [2.5.1](https://github.com/Redocly/redoc/compare/v2.4.0...v2.5.1) (2025-09-26) - - -### Bug Fixes - -* Bumped `mobx-react` dependency to address a security vulnerability. - -# [2.5.0](https://github.com/Redocly/redoc/compare/v2.4.0...v2.5.0) (2025-04-14) - - -### Bug Fixes - -* enhance accessibility for menu items with keyboard support ([#2655](https://github.com/Redocly/redoc/issues/2655)) ([2db293b](https://github.com/Redocly/redoc/commit/2db293bfb2973497dd33f31dc99e97f5bb90bbe8)) - - -### Features - -* add keyboard navigation support to JsonViewer component ([#2654](https://github.com/Redocly/redoc/issues/2654)) ([1b4126f](https://github.com/Redocly/redoc/commit/1b4126fde4531387f49c90f52efbd0c0e5f7b6ea)) - - - -# [2.4.0](https://github.com/Redocly/redoc/compare/v2.3.0...v2.4.0) (2025-02-07) - - -### Bug Fixes - -* Prototype Pollution Vulnerability Affecting redoc <=2.2.0 ([#2638](https://github.com/Redocly/redoc/issues/2638)) ([153ec7a](https://github.com/Redocly/redoc/commit/153ec7a0b7245639f404c0b038b612ae7377c7db)) -* unify redoc config ([#2647](https://github.com/Redocly/redoc/issues/2647)) ([53a6afc](https://github.com/Redocly/redoc/commit/53a6afc59624fe4591b0a0f1f20f41c0fbb5f1cf)) - - -### Features - -* add supporting react 19 in package.json ([#2652](https://github.com/Redocly/redoc/issues/2652)) ([3a74802](https://github.com/Redocly/redoc/commit/3a748022be3a7dc7f98669e1645dd5cda72f1abc)) - - - -# [2.3.0](https://github.com/Redocly/redoc/compare/v2.2.0...v2.3.0) (2025-01-16) - - -### Bug Fixes - -* displaying json example when showObjectSchemaExamples enabled ([#2635](https://github.com/Redocly/redoc/issues/2635)) ([59ee73f](https://github.com/Redocly/redoc/commit/59ee73fefa8e8edb398940076bdd721fc284caa3)) -* displaying nested items with type string ([#2634](https://github.com/Redocly/redoc/issues/2634)) ([85b622f](https://github.com/Redocly/redoc/commit/85b622fc581eb96303aeb85056aef36c74ea9f9d)) -* passing inline parameters after support react 18 for response title ([#2640](https://github.com/Redocly/redoc/issues/2640)) ([d614d2d](https://github.com/Redocly/redoc/commit/d614d2d022df8bd1989cb0eaf76d087b52120d36)) - - -### Features - -* update pattern styling ([#2196](https://github.com/Redocly/redoc/issues/2196)) ([#2600](https://github.com/Redocly/redoc/issues/2600)) ([aa0879c](https://github.com/Redocly/redoc/commit/aa0879ca0235112918428fdff8f4c48d2c6c4adf)) - - - -# [2.2.0](https://github.com/Redocly/redoc/compare/v2.1.5...v2.2.0) (2024-10-16) - - -### Bug Fixes - -* show siblings schema with oneOf ([#2576](https://github.com/Redocly/redoc/issues/2576)) ([60d131b](https://github.com/Redocly/redoc/commit/60d131b0a9dab4710e900323c9ba81160cecf7d8)) - - -### Features - -* add support x-badges ([#2605](https://github.com/Redocly/redoc/issues/2605)) ([64f1877](https://github.com/Redocly/redoc/commit/64f18779e5fe7e03f25862463cbc5062e85c867c)) - - - -## [2.1.5](https://github.com/Redocly/redoc/compare/v2.1.4...v2.1.5) (2024-06-10) - - -### Bug Fixes - -* update react to 18 and react-tabs to 6 ([#2547](https://github.com/Redocly/redoc/issues/2547)) ([c664dd0](https://github.com/Redocly/redoc/commit/c664dd0d56571ce799b8eadd081d86a6b2cdefae)) - - - -## [2.1.4](https://github.com/Redocly/redoc/compare/v2.1.3...v2.1.4) (2024-04-25) - - -### Bug Fixes - -* add deprecated css to clickable property name ([#2526](https://github.com/Redocly/redoc/issues/2526)) ([b0d03d0](https://github.com/Redocly/redoc/commit/b0d03d02069c1508447ddebc2f8a3fffa9b03ce5)) -* use h2/h3 for headings instead of h1/h2 for better seo ([#2514](https://github.com/Redocly/redoc/issues/2514)) ([2b72dc0](https://github.com/Redocly/redoc/commit/2b72dc0e90f759a8ee2e47691c844e7f05928a24)) -* security vulnerability ([#2445](https://github.com/Redocly/redoc/pull/2445)) ([1f11f5](https://github.com/Redocly/redoc/commit/1f11f597c4f10ddd601db247f5034052b6ca689f)) - - - -## [2.1.3](https://github.com/Redocly/redoc/compare/v2.1.2...v2.1.3) (2023-10-24) - - -### Bug Fixes - -* default value as object in request body ([#2437](https://github.com/Redocly/redoc/issues/2437)) ([b36a6e2](https://github.com/Redocly/redoc/commit/b36a6e27bb3e03d39ee74c3e71f18a504539d91b)) -* display string pattern in array items ([#2438](https://github.com/Redocly/redoc/issues/2438)) ([8ddeb6d](https://github.com/Redocly/redoc/commit/8ddeb6dfda686ec8a6948eb2d96efb99bf422429)) -* hideRequestPayloadSample ([#2436](https://github.com/Redocly/redoc/issues/2436)) ([bf96061](https://github.com/Redocly/redoc/commit/bf960612a47bfe10ff205b9d78f3040515a5467d)) -* more cases for react18 and cli integration ([#2416](https://github.com/Redocly/redoc/issues/2416)) ([26674e7](https://github.com/Redocly/redoc/commit/26674e70c66b686d0f0baa569b186292c41e5726)) - - - -## [2.1.2](https://github.com/Redocly/redoc/compare/v2.1.1...v2.1.2) (2023-09-11) - - -### Bug Fixes - -* react18 cli integration ([#2404](https://github.com/Redocly/redoc/issues/2404)) ([76edc15](https://github.com/Redocly/redoc/commit/76edc159399150778b384be87ee958a93e5c491c)) -* style RefreshToken URL as in the authorization section ([1d61001](https://github.com/Redocly/redoc/commit/1d6100111a0f3b609dadbd706354ce6125947df2)) - - - -## [2.1.1](https://github.com/Redocly/redoc/compare/v2.1.0...v2.1.1) (2023-08-17) - - -### Bug Fixes - -* hotfix, crash after 2.1 release ([0ab3428](https://github.com/Redocly/redoc/commit/0ab3428664f857ea07381686a2b4beb4c22b17c3)) - - - -# [2.1.0](https://github.com/Redocly/redoc/compare/v2.0.0...v2.1.0) (2023-08-10) - - -### Bug Fixes - -* call onLoaded if specs are not found ([#2182](https://github.com/Redocly/redoc/issues/2182)) ([0753bbe](https://github.com/Redocly/redoc/commit/0753bbea4b1425bdb09225fca45effae8003dce8)) -* default value for array query parameter ([#2186](https://github.com/Redocly/redoc/issues/2186)) ([3d410b6](https://github.com/Redocly/redoc/commit/3d410b6002c656efa780254c9c45c6249f90bce1)) -* **demo:** Get CORS proxy to work in Chrome on Windows ([#2220](https://github.com/Redocly/redoc/issues/2220)) ([1597bae](https://github.com/Redocly/redoc/commit/1597bae4032b65a94211e80aad51867e5af1ceb3)) -* error with immutable object spec ([#2179](https://github.com/Redocly/redoc/issues/2179)) ([53c4f36](https://github.com/Redocly/redoc/commit/53c4f36fad3e4453a72c1d136e37929de47cd35e)) -* improve accessible label by using the property name ([#2224](https://github.com/Redocly/redoc/issues/2224)) ([12be1bc](https://github.com/Redocly/redoc/commit/12be1bc5ffa11f9092c2faacd69d787f4e899960)) -* move role to list item to meet ARIA spec ([#2228](https://github.com/Redocly/redoc/issues/2228)) ([b8f7da6](https://github.com/Redocly/redoc/commit/b8f7da6b003ca12c1e2f0f4d42f3dd6d6f86ccac)) -* remove GenericObject shim ([#2177](https://github.com/Redocly/redoc/issues/2177)) ([127ef26](https://github.com/Redocly/redoc/commit/127ef260b961e07c5f82a7494b51dd3f04294e87)) -* renames 'FieldContstraints' to 'FieldConstraints' ([#2352](https://github.com/Redocly/redoc/issues/2352)) ([7e05202](https://github.com/Redocly/redoc/commit/7e052028d965624feb72d5f4b74fdb3c2d5df21f)) -* schema oneOf title with const ([#2350](https://github.com/Redocly/redoc/issues/2350)) ([4386867](https://github.com/Redocly/redoc/commit/4386867d908eae2aed2b9fd86e9f5476aadce52b)) -* **types/open-api:** import type ([#2213](https://github.com/Redocly/redoc/issues/2213)) ([33be51a](https://github.com/Redocly/redoc/commit/33be51a7a4068f44fd914314002c058a204ba0c2)) - - -### Features - -* add deprecation label to redoc-cli ([#2172](https://github.com/Redocly/redoc/issues/2172)) ([2ae7e08](https://github.com/Redocly/redoc/commit/2ae7e08af49321cea9bf2078f309b48bacf76ad6)) -* add option to hide the example code when using the `SchemaDefinition` component ([#2157](https://github.com/Redocly/redoc/issues/2157)) ([168189b](https://github.com/Redocly/redoc/commit/168189b2fdcf3667422ce3940ace3eedd0bdf284)) -* add support of react 18 ([#2369](https://github.com/Redocly/redoc/issues/2369)) ([054f604](https://github.com/Redocly/redoc/commit/054f604195629197aa8bd0fc46e91383ca5a05af)) -* add x-tags ([#2355](https://github.com/Redocly/redoc/issues/2355)) ([0bb21c8](https://github.com/Redocly/redoc/commit/0bb21c812840999d2dd2d96da42124746440b035)) -* enable keyboard navigation ([#2361](https://github.com/Redocly/redoc/issues/2361)) ([d21af58](https://github.com/Redocly/redoc/commit/d21af5841455901f0572ab475b7dc661acb86a71)) -* indicate whether request body is required or optional ([#2175](https://github.com/Redocly/redoc/issues/2175)) ([d3ad792](https://github.com/Redocly/redoc/commit/d3ad7925cfbd90b59b502b5ef53228fcd34b8a1e)) - - - -# [2.0.0](https://github.com/Redocly/redoc/compare/v2.0.0-rc.77...v2.0.0) (2022-09-12) - - - -# [2.0.0-rc.77](https://github.com/Redocly/redoc/compare/v2.0.0-rc.76...v2.0.0-rc.77) (2022-09-06) - - -### Bug Fixes - -* add hard limit on deref depth to prevent crashes ([ddde105](https://github.com/Redocly/redoc/commit/ddde105acaf0a77b0bb5d13df5fd6180bc8169e9)) -* do not use discriminator when specific schema was referenced in oneOf or anyOf ([#2153](https://github.com/Redocly/redoc/issues/2153)) ([6ac1e1e](https://github.com/Redocly/redoc/commit/6ac1e1eb183e97e2cd67ad14d8a39fac8289ebcc)) -* hoistOneOf missing refs stack and improve allOf for same $ref ([bb325d0](https://github.com/Redocly/redoc/commit/bb325d0d285c4cf4ee7c6d70878d2dd0dc9c6ed7)) -* latest docker cli tag ([#2140](https://github.com/Redocly/redoc/issues/2140)) ([8dc03eb](https://github.com/Redocly/redoc/commit/8dc03eb7ed262d6b1d460425ce43990710470845)) -* markdown parent name ([#2062](https://github.com/Redocly/redoc/issues/2062)) ([da9ed0b](https://github.com/Redocly/redoc/commit/da9ed0b4d1a4070d326ecb472459f0ff916c6036)) - -### Features - -* feet: search feature to support path ([#2145](https://github.com/Redocly/redoc/issues/2145)) ([c52ee83f](https://github.com/Redocly/redoc/commit/c52ee83f77ccfc79137c85deafe8d93e68465d45)) - - -# [2.0.0-rc.76](https://github.com/Redocly/redoc/compare/v2.0.0-rc.75...v2.0.0-rc.76) (2022-08-18) - - -### Bug Fixes - -* "API Docs By Redocly" overlapping last element in sidebar ([#2132](https://github.com/Redocly/redoc/issues/2132)) ([c60c6f5](https://github.com/Redocly/redoc/commit/c60c6f58917563d57c0eef650b9dfcece2e15049)) -* encoding issue in CDN responses ([#2130](https://github.com/Redocly/redoc/issues/2130)) ([7816902](https://github.com/Redocly/redoc/commit/781690284a45b2b8af9eb525757632d0d19ef453)) -* Optional authentication not rendered properly ([#2117](https://github.com/Redocly/redoc/issues/2117)) ([#2134](https://github.com/Redocly/redoc/issues/2134)) ([efd5e09](https://github.com/Redocly/redoc/commit/efd5e09c907b36a3999f4c9c3165b6b2bdc1d536)) - - -### Features - -* add clear cache for publish action ([#2129](https://github.com/Redocly/redoc/issues/2129)) ([d8093e3](https://github.com/Redocly/redoc/commit/d8093e3e2086874242eac82ddd202f35d5b8d558)) - - - -# [2.0.0-rc.75](https://github.com/Redocly/redoc/compare/v2.0.0-rc.74...v2.0.0-rc.75) (2022-08-10) - - -### Bug Fixes - -* duplication of title ([#2119](https://github.com/Redocly/redoc/issues/2119)) ([40ebfd2](https://github.com/Redocly/redoc/commit/40ebfd2d63758b37665e2e4447732f671811e2a5)) -* handle error if security scopes is invalid ([#2113](https://github.com/Redocly/redoc/issues/2113)) ([428fd69](https://github.com/Redocly/redoc/commit/428fd6983dc257f524121d98aeb1c58b39cf81f7)) -* publishing docker image to github packages ([#2115](https://github.com/Redocly/redoc/issues/2115)) ([250f6d1](https://github.com/Redocly/redoc/commit/250f6d12b2d31d2166990bd9cb83ca1c63509686)) -* Redocly logo ([#2109](https://github.com/Redocly/redoc/issues/2109)) ([a35bb3f](https://github.com/Redocly/redoc/commit/a35bb3ff26bf10b0e54383222df283800d6ee2c8)) -* search and navigate error ([cfd810f](https://github.com/Redocly/redoc/commit/cfd810fdf9d37862e07458fa1c3c04046e22f315)) -* sibling for openapi 3.1 ([#2112](https://github.com/Redocly/redoc/issues/2112)) ([0b1a790](https://github.com/Redocly/redoc/commit/0b1a79009010f0640a3030093b7c0dcf8caa49e4)) - - -### Features - -* add notification about new version available ([#2100](https://github.com/Redocly/redoc/issues/2100)) ([d6ca8cc](https://github.com/Redocly/redoc/commit/d6ca8cc53b9667f09ce8fef88dfac1039c562b78)) - - - -# [2.0.0-rc.74](https://github.com/Redocly/redoc/compare/v2.0.0-rc.73...v2.0.0-rc.74) (2022-07-28) - - -### Bug Fixes - -* invalid url when href is empty ([#2105](https://github.com/Redocly/redoc/issues/2105)) ([e5f0235](https://github.com/Redocly/redoc/commit/e5f02359851a3797283ee513d734ab8e27266b92)) - - - -# [2.0.0-rc.73](https://github.com/Redocly/redoc/compare/v2.0.0-rc.72...v2.0.0-rc.73) (2022-07-28) - - -### Bug Fixes - -* add label API docs by Redocly ([#2099](https://github.com/Redocly/redoc/issues/2099)) ([dcdab83](https://github.com/Redocly/redoc/commit/dcdab838903a5d923c5e327d07d7743214769a61)) -* add the latest tag for the CLI docker image ([#2087](https://github.com/Redocly/redoc/issues/2087)) ([80ecd0f](https://github.com/Redocly/redoc/commit/80ecd0f19746379b056bfb1b11950693f3dc3724)) -* correct URLs of OperationModel servers for static site generation ([#2081](https://github.com/Redocly/redoc/issues/2081)) ([b1afd08](https://github.com/Redocly/redoc/commit/b1afd08bcf83770b537ed1eb9c90341de0162a1c)) -* enum duplication values when schema uses a specific combination of oneOf and allOf([#2088](https://github.com/Redocly/redoc/issues/2088)) ([e411847](https://github.com/Redocly/redoc/commit/e4118479f69209c5dd09a2be0e978834dcd9eb8f)) -* highlight text syntax ([#2069](https://github.com/Redocly/redoc/issues/2069)) ([4fc6aa0](https://github.com/Redocly/redoc/commit/4fc6aa0859c94e25fd30c4a4250455e44cc76488)) -* merge reference for openapi 3.1 ([#2063](https://github.com/Redocly/redoc/issues/2063)) ([87541e4](https://github.com/Redocly/redoc/commit/87541e45dc2526696deb32a6350a14a44a709b54)) -* nested patternProperties ([#2073](https://github.com/Redocly/redoc/issues/2073)) ([9920991](https://github.com/Redocly/redoc/commit/99209910806b85289a89fb3131049ed79118bc72)) -* operation url in static page ([#2093](https://github.com/Redocly/redoc/issues/2093)) ([98eec19](https://github.com/Redocly/redoc/commit/98eec19647b63f3598ec30fdeb428f614cf93ad4)) -* property with nested allOf ([#2083](https://github.com/Redocly/redoc/issues/2083)) ([7cc0500](https://github.com/Redocly/redoc/commit/7cc0500f3c1ddd1da17ee31278468207093f9281)) -* recursion for boolean items ([#2097](https://github.com/Redocly/redoc/issues/2097)) ([a5804db](https://github.com/Redocly/redoc/commit/a5804db1ce60ee6d90db8a3b54138eb1ca420c6f)) -* resolve dependency conflict in installing ([#2060](https://github.com/Redocly/redoc/issues/2060)) ([e26c8b2](https://github.com/Redocly/redoc/commit/e26c8b23d9b36abd5572bd0fe350d74a5cf65afb)) -* restore old variant security injections ([#2075](https://github.com/Redocly/redoc/issues/2075)) ([1a1bc26](https://github.com/Redocly/redoc/commit/1a1bc26503c06b6a7022289e5b9353bd59e48a9a)) -* rewrite recursive checks ([#2072](https://github.com/Redocly/redoc/issues/2072)) ([2970f95](https://github.com/Redocly/redoc/commit/2970f959cfa31cb4d5288ca23ca05cd34357dcec)) -* Scrolling keeps rewriting url after a Redoc element was removed [#2051](https://github.com/Redocly/redoc/issues/2051) ([#2085](https://github.com/Redocly/redoc/issues/2085)) ([0045be0](https://github.com/Redocly/redoc/commit/0045be0b753b8fb7d8d58a4e511783a6ba858444)) -* mis-nesting of aria roles on sidebar navigation ([#2050](https://github.com/Redocly/redoc/issues/2050)) ([7ca10da](https://github.com/Redocly/redoc/commit/7ca10daf12f2cac9fecf559b11f0f0c8bd21ae43)) -* 404 on the documentation page ([#2092](https://github.com/Redocly/redoc/issues/2050)) ([17bb08](https://github.com/Redocly/redoc/commit/17bb08909a1734e6e59c83ce29f31ae7cf6fc784)) - - - - -# [2.0.0-rc.72](https://github.com/Redocly/redoc/compare/v2.0.0-rc.71...v2.0.0-rc.72) (2022-06-02) - - -### Bug Fixes - -* handled style change in ServerUrl and ServersOverlay dynamically ([#1989](https://github.com/Redocly/redoc/issues/1989)) ([a366de4](https://github.com/Redocly/redoc/commit/a366de4cf67fb94baa33b7b5c311cc1f54a63e53)) -* nested items with refs ([#2035](https://github.com/Redocly/redoc/issues/2035)) ([51127aa](https://github.com/Redocly/redoc/commit/51127aadc3e6b0f8e4066afb1c3b2ea6db453da2)) - - - -# [2.0.0-rc.71](https://github.com/Redocly/redoc/compare/v2.0.0-rc.70...v2.0.0-rc.71) (2022-05-31) - - -### Bug Fixes - -* constraints label details ([eb0917d](https://github.com/Redocly/redoc/commit/eb0917d002e57353027fee9c8f07605de8f1ff6f)) -* merge allOf in correct order ([#2020](https://github.com/Redocly/redoc/issues/2020)) ([1e4ea03](https://github.com/Redocly/redoc/commit/1e4ea03d4a9b7eddf3e4cc7cbdbd4d913583e837)) - - -### Features - -* add hideSecuritySection option allowing to disable the Security panel ([#2027](https://github.com/Redocly/redoc/issues/2027)) ([49cc11d](https://github.com/Redocly/redoc/commit/49cc11d91795653ca870e9276a1e0cd617964e25)) -* add Redoc to Redocly CDN ([#2026](https://github.com/Redocly/redoc/issues/2026)) ([77104d6](https://github.com/Redocly/redoc/commit/77104d6c0d6f457aa08a158e93b52a45877be84e)) -* add support prefix items ([27a9dba](https://github.com/Redocly/redoc/commit/27a9dbaf46aded01a6512645dab27870a85cc73b)) -* remove auth section ([#2022](https://github.com/Redocly/redoc/issues/2022)) ([a863302](https://github.com/Redocly/redoc/commit/a863302cc803bdf27187c613157ba90af1040fc4)) -* show minProperties maxProperties ([#2015](https://github.com/Redocly/redoc/issues/2015)) ([82712c5](https://github.com/Redocly/redoc/commit/82712c5b408dc6bc142307d45fb962de2a43ffba)) - - - -# [2.0.0-rc.70](https://github.com/Redocly/redoc/compare/2.0.0-rc.69...2.0.0-rc.70) (2022-05-17) - - -### Features - -* display patternProperties ([#2008](https://github.com/Redocly/redoc/issues/2008)) ([660cc85](https://github.com/Redocly/redoc/commit/660cc857bc86787e16237b407fe5f5d7a493bb48)) -* support conditional operators ([#1939](https://github.com/Redocly/redoc/issues/1939)) ([291b62a](https://github.com/Redocly/redoc/commit/291b62a206b68f8b4d98e4b74b71c0cad20a8b9b)) -* theme add links textDecoration options ([#1599](https://github.com/Redocly/redoc/issues/1599)) ([ba06485](https://github.com/Redocly/redoc/commit/ba06485ece27acbb6b846500817f4bff3e4997ba)) - - - -# [2.0.0-rc.69](https://github.com/Redocly/redoc/compare/v2.0.0-rc.68.1...v2.0.0-rc.69) (2022-05-12) - - -### Bug Fixes - -* wrong base url format causing error when constructing new URL ([#1996](https://github.com/Redocly/redoc/issues/1996)) ([d2cdaa1](https://github.com/Redocly/redoc/commit/d2cdaa1221b6a5e7b5da2418414bce1586069deb)) - - -### Features - -* add download file option ([#1699](https://github.com/Redocly/redoc/issues/1699)) ([b601c9a](https://github.com/Redocly/redoc/commit/b601c9ae9e3288286f28e06854bd93cb3507706e)) -* add option to display verb in webhooks ([#1994](https://github.com/Redocly/redoc/issues/1994)) ([311d2ce](https://github.com/Redocly/redoc/commit/311d2ce64dcf1e68c2563a276b34dda0e08b709c)) -* support .redocly.yaml for options for redoc-cli ([#1981](https://github.com/Redocly/redoc/issues/1981)) ([1f417d6](https://github.com/Redocly/redoc/commit/1f417d67c6b2e0b49e41c713958c100d8e1ad19d)) - - - -# [2.0.0-rc.68](https://github.com/Redocly/redoc/compare/v2.0.0-rc.67...v2.0.0-rc.68) (2022-05-10) - - -### Bug Fixes - -* examples in json schema object([5b9aa27](https://github.com/Redocly/redoc/commit/5b9aa27af03a1c4616f7e0195afeba47d1deeaa0)) -* handle error when definition load fails ([#1979](https://github.com/Redocly/redoc/issues/1979)) ([508ebd5](https://github.com/Redocly/redoc/commit/508ebd58a3d66f2337e9641852322458a1bd9e6b)) -* large text in examples value ([#1974](https://github.com/Redocly/redoc/issues/1974)) ([60bc603](https://github.com/Redocly/redoc/commit/60bc603e9bb85a0c9c7ac38f7014876d397f0191)) -* not show scopes if keys empty or not exist ([#1975](https://github.com/Redocly/redoc/issues/1975)) ([4e793f0](https://github.com/Redocly/redoc/commit/4e793f07a81fa8bcd4ad384d1f87b3e6c290edb7)) -* remove dropdown-aria and use native select ([#1954](https://github.com/Redocly/redoc/issues/1954)) ([186f5a9](https://github.com/Redocly/redoc/commit/186f5a98bd466b1820121aadb865291bef8c6755)) -* make Redoc lib compatible with Webpack 5 ([#1982](https://github.com/Redocly/redoc/issues/1982)) ([867861](https://github.com/Redocly/redoc/commit/8678615a0e19c9484b4cd495d70293b542d196a5)) - -### Features - -* implement configurable minimum characer length to init search ([#1402](https://github.com/Redocly/redoc/issues/1402)) ([0fa08fa](https://github.com/Redocly/redoc/commit/0fa08faab1c176a4bfc5a553e8e8f8b07aca659f)) -* support OAS 3.1 unevaluatedProperties ([#1978](https://github.com/Redocly/redoc/issues/1978)) ([0755ac6](https://github.com/Redocly/redoc/commit/0755ac6f04514eb0c08f90afceeda7858206b435)) -* publish dockerhub ([#1971](https://github.com/Redocly/redoc/issues/1971)) ([7e01a0](https://github.com/Redocly/redoc/commit/7e01a0cfe2ad8d06075bfc66ef3860edbef033f8)) - - -# [2.0.0-rc.67](https://github.com/Redocly/redoc/compare/v2.0.0-rc.66...v2.0.0-rc.67) (2022-04-28) - - -### Bug Fixes - -* Expand/Collapse all buttons disappears for flat structures ([#1424](https://github.com/Redocly/redoc/issues/1424)) ([2ca8e08](https://github.com/Redocly/redoc/commit/2ca8e081baea6996eb01b5df27b8cd88331d5c96)) -* improve markdown render with CRLF ([#1953](https://github.com/Redocly/redoc/issues/1953)) ([aba2d1a](https://github.com/Redocly/redoc/commit/aba2d1ad2d8dda9f52055c36ebde1323457dfd3e)) -* issue with navigation when operationId contains backslash or quotes ([#1513](https://github.com/Redocly/redoc/issues/1513)) ([8f7e56c](https://github.com/Redocly/redoc/commit/8f7e56c747d88be5c5eb5c4bbaee0ff69e9cb2ec)) -* prefix operation ids with parent id ([#1245](https://github.com/Redocly/redoc/issues/1245)) ([fd8917e](https://github.com/Redocly/redoc/commit/fd8917e5c109840c1bfa4c2c0902b6dcec200286)) - - -### Features - -* add optional BASE_PATH to Docker config ([#1378](https://github.com/Redocly/redoc/issues/1378)) ([90f71c0](https://github.com/Redocly/redoc/commit/90f71c0d77719871910cfba883a32ad131bef059)) -* theme add sidebar activeBackgroundColor and activeTextColor ([#1600](https://github.com/Redocly/redoc/issues/1600)) ([6716b08](https://github.com/Redocly/redoc/commit/6716b08e8871d95880e9f5a6c5491038002754e8)) - - - -# [2.0.0-rc.66](https://github.com/Redocly/redoc/compare/v2.0.0-rc.65...v2.0.0-rc.66) (2022-03-30) - - -### Bug Fixes - -* add handle local files for serve command ([#1810](https://github.com/Redocly/redoc/issues/1810)) ([117071e](https://github.com/Redocly/redoc/commit/117071ee83a32d9b3350d8afe2bdb6365a44e2ec)) -* move comma out of code block in SecurityRequirement.tsx ([#1924](https://github.com/Redocly/redoc/issues/1924)) ([ab3e8a8](https://github.com/Redocly/redoc/commit/ab3e8a8f80f453066c5495e73ac932a8fef0830a)) -* rename bandle command and add deprecate notice ([#1935](https://github.com/Redocly/redoc/issues/1935)) ([eb096b6](https://github.com/Redocly/redoc/commit/eb096b69be52568fc581027161c7d0c4b26c56c1)) - - -### Features - -* add support for displaying operationId in the sidebar ([#1927](https://github.com/Redocly/redoc/issues/1927)) ([09786f2](https://github.com/Redocly/redoc/commit/09786f2a5ade6303ea00512483b172347721ca70)) -* add nonce support ([#1566](https://github.com/Redocly/redoc/issues/1566)) ([c75ac9c](https://github.com/Redocly/redoc/commit/c75ac9cf70012e2d539b379aab2f0974d088db07)) -* h2 set color form theme.colors.text.primary ([#1491](https://github.com/Redocly/redoc/pull/1491)) ([25be93](https://github.com/Redocly/redoc/commit/25be934bb184d7b2b6b47d004b3c83ce4d16a2c6)) - - - -# [2.0.0-rc.65](https://github.com/Redocly/redoc/compare/v2.0.0-rc.64...v2.0.0-rc.65) (2022-03-15) - - -### Bug Fixes - -* auth link scroll for Firerox ([#1922](https://github.com/Redocly/redoc/issues/1922)) ([fe67e9c](https://github.com/Redocly/redoc/commit/fe67e9c332fee716582a00d60fdf34767bff22d4)) -* improve customization fab ([#1891](https://github.com/Redocly/redoc/issues/1891)) ([635f379](https://github.com/Redocly/redoc/commit/635f379eb086268c91eef715148eca8f080cfb86)) -* sanitize array of items ([#1920](https://github.com/Redocly/redoc/issues/1920)) ([059bd80](https://github.com/Redocly/redoc/commit/059bd8000e5fd65753d5ca9e0c47940394e0c79b)) -* use x-displayName in securityDefinitions ([#1444](https://github.com/Redocly/redoc/pull/1444)) ([ac6fb4](https://github.com/Redocly/redoc/commit/ac6fb458a4eee8d0da4b63f9bafc7669adc8af03)) -* deprecated badge on one of any of buttons ([#1930](https://github.com/Redocly/redoc/pull/1930)) ([f60b47](https://github.com/Redocly/redoc/commit/f60b4758330dd756d670309827da60d3465b672a)) - - - -# [2.0.0-rc.64](https://github.com/Redocly/redoc/compare/v2.0.0-rc.63...v2.0.0-rc.64) (2022-02-24) - - -### Bug Fixes - -* bump json-pointer version to avoid CVE-2021-23820 ([#1910](https://github.com/Redocly/redoc/issues/1910)) ([777efdd](https://github.com/Redocly/redoc/commit/777efdde35c1c8dc79dd714e1666279e9192dddb)) -* external ref in schema definition ([#1894](https://github.com/Redocly/redoc/issues/1894)) ([57cdd9f](https://github.com/Redocly/redoc/commit/57cdd9f6da38418d6214ac3c6480c5847ecd0228)) - - - -# [2.0.0-rc.63](https://github.com/Redocly/redoc/compare/v2.0.0-rc.61...v2.0.0-rc.63) (2022-01-27) - - -### Bug Fixes - -* scroll in sidebar ([b5b0d61](https://github.com/Redocly/redoc/commit/b5b0d61b3568ac2a8aaceafa96ffa6d2f86ed323)) - - -# [2.0.0-rc.62](https://github.com/Redocly/redoc/compare/v2.0.0-rc.61...v2.0.0-rc.62) (2022-01-26) - - -### Bug Fixes - -* fix field expand does not work ([#1875](https://github.com/Redocly/redoc/issues/1875)) - - -# [2.0.0-rc.61](https://github.com/Redocly/redoc/compare/v2.0.0-rc.60...v2.0.0-rc.61) (2022-01-26) - - -### Bug Fixes - -* fix crash in redoc-cli after migrating to esbuild ([#1872](https://github.com/Redocly/redoc/issues/1872)) - -# [2.0.0-rc.60](https://github.com/Redocly/redoc/compare/v2.0.0-rc.59...v2.0.0-rc.60) (2022-01-25) - - -### Bug Fixes - -* add schema expansion level ([#1868](https://github.com/Redocly/redoc/issues/1868)) ([250d53a](https://github.com/Redocly/redoc/commit/250d53a59fb4bf881875ba466c5a7f3b55d80007)) -* attachHeadingsDescriptions match headings incorrectly ([#1845](https://github.com/Redocly/redoc/issues/1845)) ([ea8573d](https://github.com/Redocly/redoc/commit/ea8573dbd78439be50aa2b38f1c83658c16783e3)) -* definition name util ([#1865](https://github.com/Redocly/redoc/issues/1865)) ([95a7347](https://github.com/Redocly/redoc/commit/95a734793158d4749e98ee4a7e90e70713a04ced)) -* No maxLength label is displayed for arrays of items [#1701](https://github.com/Redocly/redoc/issues/1701) ([#1765](https://github.com/Redocly/redoc/issues/1765)) ([6c7685e](https://github.com/Redocly/redoc/commit/6c7685e5fa04314328a445d7077600692c49489c)) -* Response objects couldn't open ([#1867](https://github.com/Redocly/redoc/issues/1867)) ([18f943d](https://github.com/Redocly/redoc/commit/18f943d2b5668f1552d212dee1c3a2ed59054095)) -* writeOnly params displaying in webhook ([#1866](https://github.com/Redocly/redoc/issues/1866)) ([5694913](https://github.com/Redocly/redoc/commit/5694913e71f0e8c3a5d9393f1b4ae92534127841)) - - -### Features - -* **#1251:** Add file selector to demo application ([#1859](https://github.com/Redocly/redoc/issues/1859)) ([b74dcde](https://github.com/Redocly/redoc/commit/b74dcde42b45ebe5ae617f1ec3cfea2ea1aff922)), closes [#1251](https://github.com/Redocly/redoc/issues/1251) [#1251](https://github.com/Redocly/redoc/issues/1251) [#1251](https://github.com/Redocly/redoc/issues/1251) -* redoc-cli add host option ([#1598](https://github.com/Redocly/redoc/issues/1598)) ([fb104e6](https://github.com/Redocly/redoc/commit/fb104e696618b0b81439da134887830a0f2439ea)) -* support examples in object schema ([#1832](https://github.com/Redocly/redoc/issues/1832)) ([c986f0e](https://github.com/Redocly/redoc/commit/c986f0ef1a38bc1e61cae70830d84de03b684b89)) - - - -# [2.0.0-rc.59](https://github.com/Redocly/redoc/compare/v2.0.0-rc.58...v2.0.0-rc.59) (2021-12-09) - - -### Bug Fixes - -* fix scroll in example dropdown ([#1803](https://github.com/Redocly/redoc/issues/1803)) ([bc2d9a7](https://github.com/Redocly/redoc/commit/bc2d9a7d9cd530274483fecd136db290a5b46ff7)) -* x-examples for request body param does not display [#1743](https://github.com/Redocly/redoc/issues/1743) ([#1826](https://github.com/Redocly/redoc/issues/1826)) ([aaa3b32](https://github.com/Redocly/redoc/commit/aaa3b3280c8422d450e8849ae02135dde199d6d5)) - -### Features - -* add option sideNavStyle ([#1805](https://github.com/Redocly/redoc/pull/1805)) ([2e4663b](https://github.com/Redocly/redoc/commit/2e4663b3b7022f25d3dc808afbcb3b3ad9483c41)) - - -# [2.0.0-rc.58](https://github.com/Redocly/redoc/compare/v2.0.0-rc.57...v2.0.0-rc.58) (2021-11-29) - - -### Bug Fixes - -* add browser build for webpack 5 ([#1796](https://github.com/Redocly/redoc/issues/1796)) ([0e43ad3](https://github.com/Redocly/redoc/commit/0e43ad3102cfba8c4b30e59500ad4efc53f01c2d)) -* Default boolean property value not rendered [#1779](https://github.com/Redocly/redoc/issues/1779) ([#1781](https://github.com/Redocly/redoc/issues/1781)) ([734080c](https://github.com/Redocly/redoc/commit/734080c35471d16f87004f7f9a51dcdeee1278a6)) -* exclusiveMin/Max shows incorect range ([#1799](https://github.com/Redocly/redoc/issues/1799)) ([b604bd8](https://github.com/Redocly/redoc/commit/b604bd8da874f07e9e9f8b193ad10117a5f5059c)) -* mobile view in docker image ([#1795](https://github.com/Redocly/redoc/issues/1795)) ([ad652b9](https://github.com/Redocly/redoc/commit/ad652b9c7fbcd84a6e83397272de64e57213fe9a)) - - - -# [2.0.0-rc.57](https://github.com/Redocly/redoc/compare/v2.0.0-rc.56...v2.0.0-rc.57) (2021-10-11) - - -### Bug Fixes - -* fix deref logic for oas3.1 ([#1767](https://github.com/Redocly/redoc/issues/1767)) ([4fb9c83](https://github.com/Redocly/redoc/commit/4fb9c835256b9e44bcecabde7baf0f0f3e5beb3f)) -* improve publish action scripts ([#1729](https://github.com/Redocly/redoc/issues/1729)) ([952c05c](https://github.com/Redocly/redoc/commit/952c05c6b4b95fe6082611fed9e2f0913272b904)) -* No match scenario in search ([#1667](https://github.com/Redocly/redoc/issues/1667)) ([352a851](https://github.com/Redocly/redoc/commit/352a8518576dfb6b240ec41212a64f1c7312ab67)) -* OpenAPI 3.1: Missing description when $ref used [#1727](https://github.com/Redocly/redoc/issues/1727) ([fe6909e](https://github.com/Redocly/redoc/commit/fe6909ed80dd6053b48c30f63a2460614bf957a9)) -* OpenAPI 3.1: Missing description when $ref used [#1727](https://github.com/Redocly/redoc/issues/1727) ([35f7787](https://github.com/Redocly/redoc/commit/35f77878de7d1dd250040771f17757a5a6ce85f9)) -* Redoc spelling ([c87600d](https://github.com/Redocly/redoc/commit/c87600d520f037d291169b44b5803a35af16b5a5)) -* Schema for events incorrectly omits readOnly and includes writeOnly ([#1720](https://github.com/Redocly/redoc/issues/1720) [#1540](https://github.com/Redocly/redoc/issues/1540)) ([a8e0c29](https://github.com/Redocly/redoc/commit/a8e0c296852661dec1dcad2388d7589f9e0d3609)) -* scrolling to the first item ([#1753](https://github.com/Redocly/redoc/issues/1753)) ([bccd213](https://github.com/Redocly/redoc/commit/bccd21394ef79940c2efbe24a0d866c7af103d94)) -* The number of items in the array in the array is incorrect [#1762](https://github.com/Redocly/redoc/issues/1762) ([#1763](https://github.com/Redocly/redoc/issues/1763)) ([3b8d644](https://github.com/Redocly/redoc/commit/3b8d6441bd9978b849a53021d40fd4fe150272ea)) - - -### Features - -* add q/kdb+ syntax highlighting ([#1605](https://github.com/Redocly/redoc/issues/1605)) ([43451ba](https://github.com/Redocly/redoc/commit/43451ba4cd24270b8629a967d3fd2ce2eed8912e)) -* new option generatedPayloadSamplesMaxDepth ([#1642](https://github.com/Redocly/redoc/issues/1642)) ([bd9390a](https://github.com/Redocly/redoc/commit/bd9390a5bfc5458c06121110db33968a20fcebe4)) - - - -# [2.0.0-rc.56](https://github.com/Redocly/redoc/compare/v2.0.0-rc.53...v2.0.0-rc.56) (2021-08-11) - - -### Bug Fixes - -* handle empty object in security array ([#1678](https://github.com/Redocly/redoc/issues/1678)) ([9e1ea70](https://github.com/Redocly/redoc/commit/9e1ea703e56a71567b13d0d22e2d69945a22de4d)) -* hideLoading options in redoc standalone ([#1709](https://github.com/Redocly/redoc/issues/1709)) ([6a52a16](https://github.com/Redocly/redoc/commit/6a52a16d5b75a2955da7217c4a264f0fa8e98c89)) -* improve openapi 3.1 ([#1700](https://github.com/Redocly/redoc/issues/1700)) ([cd2d6f7](https://github.com/Redocly/redoc/commit/cd2d6f76e87c8385786a9c8e51c0d11c79d9707c)) - - show contentEncoding on fields - - crash with OpenAPI 3.1 type as array of strings in requestBody - - nullable label not shown -* nullable object's fields were missing ([#1721](https://github.com/Redocly/redoc/issues/1721)) ([ddf297b](https://github.com/Redocly/redoc/commit/ddf297b11269ef515bd62771912a5609721d5e39)) - - -### Features - -* add github action to build docker images and push to ghcr.io on release ([#1614](https://github.com/Redocly/redoc/issues/1614)) ([919a5f0](https://github.com/Redocly/redoc/commit/919a5f02fb94ca869011d5eaf63ee71b61b60150)) -* add yaml highlight ([#1684](https://github.com/Redocly/redoc/issues/1684)) ([d724440](https://github.com/Redocly/redoc/commit/d72444008533623c87f238fe8758b1dd518b89eb)) -* added localization for some labels ([#1675](https://github.com/Redocly/redoc/issues/1675)) ([ec50858](https://github.com/Redocly/redoc/commit/ec50858ec47af08c5fe553266fe3c209fba97eae)) - - -# [2.0.0-rc.55](https://github.com/Redocly/redoc/compare/v2.0.0-rc.54...v2.0.0-rc.55) (2021-07-01) - - -### Bug Fixes - -* broken linkify ([3df72fb](https://github.com/Redocly/redoc/commit/3df72fb99ff24fb9a551565b7568d96f8614ed6f)), closes [#1655](https://github.com/Redocly/redoc/issues/1655) -* fix accidentally removed onLoaded ([b41a8b4](https://github.com/Redocly/redoc/commit/b41a8b4ac714084dc25de7914fa1f99386e907e2)), closes [#1656](https://github.com/Redocly/redoc/issues/1656) - - -### Features - -* added git folder sync config ([a69f0fb](https://github.com/Redocly/redoc/commit/a69f0fb00986a04c812ab273711e8f3501b98139)) - - - -# [2.0.0-rc.54](https://github.com/Redocly/redoc/compare/v2.0.0-rc.53...v2.0.0-rc.54) (2021-06-09) - - -### Bug Fixes - -* added missing semicolon to styling ([#1578](https://github.com/Redocly/redoc/issues/1578)) ([dfc4cf1](https://github.com/Redocly/redoc/commit/dfc4cf1caa131aa7bc6da6d489e3a8425d800326)) -* parse json theme string for standalone tag ([#1492](https://github.com/Redocly/redoc/issues/1492)) ([d7a0a4d](https://github.com/Redocly/redoc/commit/d7a0a4da17241dd9c089202dba76a8312248616e)) -* right absolute path for load and bundle definition ([#1579](https://github.com/Redocly/redoc/issues/1579)) ([ab2d57a](https://github.com/Redocly/redoc/commit/ab2d57a5a2ac5df007d76be0d664f3fb5f909566)) -* use operation path if operation summary/description is not provided ([#1596](https://github.com/Redocly/redoc/issues/1596)) ([4b072be](https://github.com/Redocly/redoc/commit/4b072be8d1c0dc4f1fa627168eebaed0a0213e08)), closes [#1270](https://github.com/Redocly/redoc/issues/1270) - - -### Features - -* add basic support OpenAPI 3.1 ([#1622](https://github.com/Redocly/redoc/issues/1622)) ([823be24](https://github.com/Redocly/redoc/commit/823be24b313c3a2445df7e0801a0cc79c20bacd1)) -* merge refs oas 3.1 ([#1640](https://github.com/Redocly/redoc/issues/1640)) ([f4ea368](https://github.com/Redocly/redoc/commit/f4ea368f78a693fd70d48b5e0e5ffce3560432f4)) - - - -# [2.0.0-rc.51](https://github.com/Redocly/redoc/compare/v2.0.0-rc.50...v2.0.0-rc.51) (2021-04-08) - -### Bug Fixes - -* use openapi-core to bundle definition instead of json-schema-ref-parser ([5033946](https://github.com/Redocly/redoc/commit/503394655da2aac544e278796098cba93d9194b9)), -closes: [#1506](https://github.com/Redocly/redoc/issues/1506), [#1478](https://github.com/Redocly/redoc/issues/1478) -* add disable-google-font parameter to serve command in cli ([c7bbef5](https://github.com/Redocly/redoc/commit/c7bbef515524095e957729eac35a5b7a97619b55)), closes [#1501](https://github.com/Redocly/redoc/issues/1501) - - - -# [2.0.0-rc.50](https://github.com/Redocly/redoc/compare/v2.0.0-rc.49...v2.0.0-rc.50) (2021-02-15) - - -### Bug Fixes - -* add includes polyfill ([3ba622f](https://github.com/Redocly/redoc/commit/3ba622f3ab9e28c954fe05f42e7b90862fc3d544)), closes [#1530](https://github.com/Redocly/redoc/issues/1530) -* background-color in search results ([#1531](https://github.com/Redocly/redoc/issues/1531)) ([d288165](https://github.com/Redocly/redoc/commit/d288165a4ea04aedc23dba12020a73e86f20755b)) -* false-positive recursive tag case when using oneOf + allOf ([#1534](https://github.com/Redocly/redoc/issues/1534)) ([8270481](https://github.com/Redocly/redoc/commit/8270481e9f0f381b392f7921d21cb06e0e673b6d)) - - - -# [2.0.0-rc.49](https://github.com/Redocly/redoc/compare/v2.0.0-rc.48...v2.0.0-rc.49) (2021-01-30) - - -### Bug Fixes - -* crash on multiple examples on parameter object ([0dce880](https://github.com/Redocly/redoc/commit/0dce880dce1e489c7e8963e352d97603262f4b86)), closes [#1485](https://github.com/Redocly/redoc/issues/1485) -* fix SourceCodeWithCopy component to be non-pure ([040ce72](https://github.com/Redocly/redoc/commit/040ce72a8ae0c1ca7504e10e44d0b2ac7ba04977)) -* pass boolean and number values as a string in highlight function ([#1512](https://github.com/Redocly/redoc/issues/1512)) ([c874a59](https://github.com/Redocly/redoc/commit/c874a5942c3bf9f6a2dc5909e31d57925d40aa86)) - - - -# [2.0.0-rc.48](https://github.com/Redocly/redoc/compare/v2.0.0-rc.47...v2.0.0-rc.48) (2020-11-30) - - -### Bug Fixes - -* add missed labels to elements ([#1445](https://github.com/Redocly/redoc/issues/1445)) ([8c559bc](https://github.com/Redocly/redoc/commit/8c559bcbcde39efee7f1570b88840468bfdfb17c)) - - -### Features - -* add new option hideSchemaPattern ([#1475](https://github.com/Redocly/redoc/issues/1475)) ([bb4594e](https://github.com/Redocly/redoc/commit/bb4594ee58d89819c975bdb575083c0667e3d940)) -* support multiple examples for parameters ([#1470](https://github.com/Redocly/redoc/issues/1470)) ([d12e410](https://github.com/Redocly/redoc/commit/d12e410d99a988948b359093159df79572bc78ab)) - - - -# [2.0.0-rc.46](https://github.com/Redocly/redoc/compare/v2.0.0-rc.45...v2.0.0-rc.46) (2020-11-05) - - -### Bug Fixes - -* fix arrow color in responses ([#1452](https://github.com/Redocly/redoc/issues/1452)) ([6bedcf9](https://github.com/Redocly/redoc/commit/6bedcf94b26d820101ab510b28d2b76a38999eea)) -* remove duplicated slash if hideHostname option enabled ([#1448](https://github.com/Redocly/redoc/issues/1448)) ([4729fc3](https://github.com/Redocly/redoc/commit/4729fc3d8fc83f4af087cd7932adf500b45bab4e)) -* use shrinkwrap for cli package ([#1446](https://github.com/Redocly/redoc/issues/1446)) ([4567534](https://github.com/Redocly/redoc/commit/4567534cbb26f13a72a64d49faca64fc992d6dd8)) - - -### Features - -* add tabTextColor option for responses ([#1451](https://github.com/Redocly/redoc/issues/1451)) ([702fea0](https://github.com/Redocly/redoc/commit/702fea0f410499101efc554983c6db58acc84889)) - - - -# [2.0.0-rc.45](https://github.com/Redocly/redoc/compare/v2.0.0-rc.43...v2.0.0-rc.45) (2020-10-27) - - -### Bug Fixes - -* fix the name of OpenID Connect security scheme ([#1425](https://github.com/Redocly/redoc/issues/1425)) ([c11f679](https://github.com/Redocly/redoc/commit/c11f679f82586a96225488c8a96d0c908bfd2e09)) -* increase colors contrast to make them more accessible ([#1433](https://github.com/Redocly/redoc/issues/1433)) ([e2de5b0](https://github.com/Redocly/redoc/commit/e2de5b065eabd00d301ea61106ddafc65bd83afa)) - - -### Features - -* add field constraint indicator for uniqueItems ([#1423](https://github.com/Redocly/redoc/issues/1423)) ([c0ae9de](https://github.com/Redocly/redoc/commit/c0ae9de60758aa7561ce8a04b6e0060d0bc4a258)), closes [#1353](https://github.com/Redocly/redoc/issues/1353) -* new extensions hook PropertyDetailsCell + wrap property name into span ([0703f73](https://github.com/Redocly/redoc/commit/0703f73f79a1cabafdc1a908ebb0c5ab142ca825)) - - - -# [2.0.0-rc.44](https://github.com/Redocly/redoc/compare/v2.0.0-rc.43...v2.0.0-rc.44) (2020-10-16) - - -### Features - -* new extensions hook PropertyDetailsCell + wrap property name into span ([0fae030](https://github.com/Redocly/redoc/commit/0fae03099645bd9d3795709175640583b08dfc3d)) - - - -# [2.0.0-rc.43](https://github.com/Redocly/redoc/compare/v2.0.0-rc.42...v2.0.0-rc.43) (2020-10-13) - - -### Bug Fixes - -* fix broken observable after mobx upgrade ([#1415](https://github.com/Redocly/redoc/issues/1415)) ([26c407b](https://github.com/Redocly/redoc/commit/26c407bd0f2bc1ec9881e0a3668e09e645fc0cc0)) - - - -# [2.0.0-rc.42](https://github.com/Redocly/redoc/compare/v2.0.0-rc.41...v2.0.0-rc.42) (2020-10-13) - - -### Bug Fixes - -* hide dropdown input on IE 11 ([#1403](https://github.com/Redocly/redoc/issues/1403)) ([6632d84](https://github.com/Redocly/redoc/commit/6632d844536532227cb92290f9fc2b6b2f913270)) -* make samples accessible by keyboard ([#1401](https://github.com/Redocly/redoc/issues/1401)) ([146b38c](https://github.com/Redocly/redoc/commit/146b38c9d0b926765d8e00dd37204c30bf3ac4e0)) -* make schema layout more responsive on small screen ([#1411](https://github.com/Redocly/redoc/issues/1411)) ([84ab95d](https://github.com/Redocly/redoc/commit/84ab95ddc7b5dc159098aecf82ad922ffd4a3093)) - - - -# [2.0.0-rc.41](https://github.com/Redocly/redoc/compare/v2.0.0-rc.40...v2.0.0-rc.41) (2020-09-24) - - -### Bug Fixes - -* display response code at the top after adding a line break ([#1374](https://github.com/Redocly/redoc/issues/1374)) ([c801b87](https://github.com/Redocly/redoc/commit/c801b87d2aea5e17d35093e2548e1f51f42b1ee3)) -* fix displaying response title ([#1376](https://github.com/Redocly/redoc/issues/1376)) ([f3e8ab4](https://github.com/Redocly/redoc/commit/f3e8ab4f8e5522c9ea1ddedb143e23c7d62f5807)) -* fix displaying top-level object without any properties ([a5468fb](https://github.com/Redocly/redoc/commit/a5468fb7bb99fcfe33724af939b1a589c1219052)) -* show long pattern and add toggle button ([#1375](https://github.com/Redocly/redoc/issues/1375)) ([a6b41aa](https://github.com/Redocly/redoc/commit/a6b41aa00b7592512fdaa7532d9f5d85238db29b)) - - -### Features - -* load external search index ([346b10f](https://github.com/Redocly/redoc/commit/346b10f1739d6b44066bdf1f6aac39d5ee3567d2)) -* support for ignoring specified named schemas ([9730c4e](https://github.com/Redocly/redoc/commit/9730c4ee1c274c5775966959b69c209c40034b11)) - - - -# [2.0.0-rc.40](https://github.com/Redocly/redoc/compare/v2.0.0-rc.39...v2.0.0-rc.40) (2020-08-24) - - -### Bug Fixes - -* invalid discriminator dropdown behavior with enum ([be07197](https://github.com/Redocly/redoc/commit/be07197e6d1e85a3fd3e61189a36b288751c077d)) - - - -# [2.0.0-rc.39](https://github.com/Redocly/redoc/compare/v2.0.0-rc.38...v2.0.0-rc.39) (2020-08-22) - - -### Bug Fixes - -* fix broken dropdowns with SSR by using forked react-dropdown-aria ([c322639](https://github.com/Redocly/redoc/commit/c322639f7c3e7efbbd623ae83afb88faa91d9e67)) -* make callbacks expandable by keyboard ([#1354](https://github.com/Redocly/redoc/issues/1354)) ([46eee7b](https://github.com/Redocly/redoc/commit/46eee7b70c8ee9da0d8857a823c4df39a5f18b53)) - - - -# [2.0.0-rc.38](https://github.com/Redocly/redoc/compare/v2.0.0-rc.37...v2.0.0-rc.38) (2020-08-20) - - -### Bug Fixes - -* do not crash for invalid parameter.in value ([addf895](https://github.com/Redocly/redoc/commit/addf8956e33654a1586a8ac6ed7325519cd99da8)), closes [#1340](https://github.com/Redocly/redoc/issues/1340) -* scale sideMenu labels according to computed font size ([#1356](https://github.com/Redocly/redoc/issues/1356)) ([fed9a06](https://github.com/Redocly/redoc/commit/fed9a061d59592ec17cedbe4fd392e1f74c21527)) - - - -# [2.0.0-rc.37](https://github.com/Redocly/redoc/compare/v2.0.0-rc.36...v2.0.0-rc.37) (2020-08-14) - - -### Features - -* add webhooks support ([#1304](https://github.com/Redocly/redoc/issues/1304)) ([41f81b4](https://github.com/Redocly/redoc/commit/41f81b4d96648fec6bf0c39799c0aa2dded48749)) - - - -# [2.0.0-rc.36](https://github.com/Redocly/redoc/compare/v2.0.0-rc.35...v2.0.0-rc.36) (2020-08-04) - - -### Bug Fixes - -* highlight json keys using different color ([#1287](https://github.com/Redocly/redoc/issues/1287)) ([c9596d4](https://github.com/Redocly/redoc/commit/c9596d4b6cd9dced9fdee77525e0da90960c562a)) -* make elements accessible by keyboard navigation tools ([#1339](https://github.com/Redocly/redoc/issues/1339)) ([2ce7189](https://github.com/Redocly/redoc/commit/2ce71895bc14f9189b4e6cbdb6d838898717823f)) - - -### Features - -* new option simpleOneOfTypeLabel ([7af2efe](https://github.com/Redocly/redoc/commit/7af2efe731cdb16ebe5de6cb3e96f80cceb7d98d)) - - - -# [2.0.0-rc.35](https://github.com/Redocly/redoc/compare/v2.0.0-rc.34...v2.0.0-rc.35) (2020-07-24) - -### Bug Fixes - -* update EnumValues component ([#1324](https://github.com/Redocly/redoc/issues/1324)) ([de27ac0](https://github.com/Redocly/redoc/commit/de27ac03081d55967f5a479fb1352a83b8ceb8b2)) - - - -# [2.0.0-rc.34](https://github.com/Redocly/redoc/compare/v2.0.0-rc.33...v2.0.0-rc.34) (2020-07-24) - -Same as rc.33 by mistake - - - -# [2.0.0-rc.33](https://github.com/Redocly/redoc/compare/v2.0.0-rc.31...v2.0.0-rc.33) (2020-07-21) - - -### Bug Fixes - -* default style and explode for params ([633d712](https://github.com/Redocly/redoc/commit/633d71293fa9af2bda3bf456a9258625ee2b94a1)), closes [#1016](https://github.com/Redocly/redoc/issues/1016) -* fix contrast ratio for response titles ([47c6319](https://github.com/Redocly/redoc/commit/47c63192062d87b2b3205b915472930eaff6cc03)) -* fix expand variable for vars with hyphens or dots ([0904b3f](https://github.com/Redocly/redoc/commit/0904b3fec24edc56c4a4951501fe02ae22fd852b)), closes [#926](https://github.com/Redocly/redoc/issues/926) -* make dropdowns accessible by keyboard ([e8a0d10](https://github.com/Redocly/redoc/commit/e8a0d105ca52204b0d6fd61f5e909d9dbbe6f147)) -* make endpoint dropdown accessible ([3d25005](https://github.com/Redocly/redoc/commit/3d25005f084f06ac01b8fa13eb1d69092e99fd27)) -* make properties focusable ([05fd754](https://github.com/Redocly/redoc/commit/05fd7543a29e0aeb364c1ba3f2d736656de7b3b7)) -* make response sections focusable ([442014c](https://github.com/Redocly/redoc/commit/442014c06d6a7d2260adf7bc5798dd29869f10c9)) -* make sample controls focusable ([006031c](https://github.com/Redocly/redoc/commit/006031c51787b617f2b0aed80a4b8486c5d2d3ca)) -* update focus styling ([30a27c1](https://github.com/Redocly/redoc/commit/30a27c116b366428570d0b5516b5b2b4bcd0c5fc)) - - -### Features - -* add maxDisplayedEnumValues config and buttons for show/hide enums ([#1322](https://github.com/Redocly/redoc/issues/1322)) ([a2b018d](https://github.com/Redocly/redoc/commit/a2b018d393ee25fb8e9233f8123c29d14ab054c7)) -* array size info based on min max Items properties ([#1308](https://github.com/Redocly/redoc/issues/1308)) ([644e96a](https://github.com/Redocly/redoc/commit/644e96ae457047ce09f55aa1f14a42c41dbc1dc8)) -* new option sortEnumValuesAlphabetically ([#1321](https://github.com/Redocly/redoc/issues/1321)) ([a96a11a](https://github.com/Redocly/redoc/commit/a96a11a4dc8a509c6c3fba67dc4e065b66624e18)) - - - -# [2.0.0-rc.32](https://github.com/Redocly/redoc/compare/v2.0.0-rc.31...v2.0.0-rc.32) (2020-07-21) - -Same as rc.31 by mistake - - - -# [2.0.0-rc.31](https://github.com/Redocly/redoc/compare/v2.0.0-rc.30...v2.0.0-rc.31) (2020-06-25) - - -### Bug Fixes - -* do not display long regexps ([#1295](https://github.com/Redocly/redoc/issues/1295)) ([2ede22c](https://github.com/Redocly/redoc/commit/2ede22c45cc970ea1ac296adbae1f6032744f823)) -* prevent body scrolling when user scrolls side menu ([#1300](https://github.com/Redocly/redoc/issues/1300)) ([865a56a](https://github.com/Redocly/redoc/commit/865a56a2a9a105ef7b3b9150767399ca7339195a)) - - - -# [2.0.0-rc.30](https://github.com/Redocly/redoc/compare/v2.0.0-rc.29...v2.0.0-rc.30) (2020-05-25) - - -### Bug Fixes - -* add security headers to Docker nginx config ([#1244](https://github.com/Redocly/redoc/issues/1244)) ([4512436](https://github.com/Redocly/redoc/commit/4512436f1d88bd99558fe5f8384b37aa62562480)) -* keep 3-column layout on 13-inch mbp ([8d1d4c8](https://github.com/Redocly/redoc/commit/8d1d4c82e1377aecf936985ac13fa9bf5257562a)) -* proper search-index dispose ([9dd129d](https://github.com/Redocly/redoc/commit/9dd129d90b87f24ad20f084c44d48be50d750c94)) - - - -# [2.0.0-rc.29](https://github.com/Redocly/redoc/compare/v2.0.0-rc.28...v2.0.0-rc.29) (2020-05-10) - - -### Bug Fixes - -* depreacate x-code-samples, rename to x-codeSamples for consistency ([becc2f5](https://github.com/Redocly/redoc/commit/becc2f58568388b6500e6476874f27f62ff58ba9)) -* do not crash on incompatible allOf, console.warn instead ([6e607b9](https://github.com/Redocly/redoc/commit/6e607b9a2928b062c7705087432c0f0d88e74f5d)), closes [#1156](https://github.com/Redocly/redoc/issues/1156) -* download button opens in new tab instead of downloading ([b59faad](https://github.com/Redocly/redoc/commit/b59faada8210a4c8f61fa0e850b7d844574a46d1)), closes [#1247](https://github.com/Redocly/redoc/issues/1247) -* fix broken md headings with ampersand ([8460659](https://github.com/Redocly/redoc/commit/846065916d58cf628f0bc93c74be429ecdea12e7)), closes [#1173](https://github.com/Redocly/redoc/issues/1173) - - -### Features - -* **cli:** add the --title option to the serve subcommand ([#1160](https://github.com/Redocly/redoc/issues/1160)) ([10414fc](https://github.com/Redocly/redoc/commit/10414fc6d5c0f91b5e93b1ed2326e4e508611324)) - - - -# [2.0.0-rc.28](https://github.com/Redocly/redoc/compare/v2.0.0-rc.27...v2.0.0-rc.28) (2020-04-27) - - -### Bug Fixes - -* encode URLs in json samples linkify (xss) ([62c01da](https://github.com/Redocly/redoc/commit/62c01da420fca2137674ae562d4ecba54db97da9)), thanks to @masatokinugawa - - - -# [2.0.0-rc.27](https://github.com/Redocly/redoc/compare/v2.0.0-rc.26...v2.0.0-rc.27) (2020-04-20) - - -### Features - -* add callbacks support ([#1224](https://github.com/Redocly/redoc/issues/1224)) ([57e93ec](https://github.com/Redocly/redoc/commit/57e93ec4355de2659fcb5449b14b7ed738c6c276)) - - - -# [2.0.0-rc.26](https://github.com/Redocly/redoc/compare/v2.0.0-rc.25...v2.0.0-rc.26) (2020-03-29) - - -### Bug Fixes - -* crash to wrong spelling in localeCompare ([3908a7c](https://github.com/Redocly/redoc/commit/3908a7c46448d277b82318659cdea65db52f9e70)), closes [#1218](https://github.com/Redocly/redoc/issues/1218) - - - -# [2.0.0-rc.25](https://github.com/Redocly/redoc/compare/v2.0.0-rc.24...v2.0.0-rc.25) (2020-03-27) - - -### Bug Fixes - -* do not collapse top level on Collapse All in json samples ([#1209](https://github.com/Redocly/redoc/issues/1209)) ([830371b](https://github.com/Redocly/redoc/commit/830371b5d1edf4ba7a138b3b3d78148d020e0349)) -* fix passing boolean value to showExtensions options ([#1211](https://github.com/Redocly/redoc/issues/1211)) ([c6eaa02](https://github.com/Redocly/redoc/commit/c6eaa0281bb0f62b019c865e4aefb863ce84d628)) -* improve names for some theme settings ([a0bd27c](https://github.com/Redocly/redoc/commit/a0bd27c75427a39abc9c753b0654678eed2f3851)) -* sort discriminator entries by mapping order ([#1216](https://github.com/Redocly/redoc/issues/1216)) ([ac4f915](https://github.com/Redocly/redoc/commit/ac4f915494f289d1c97ffdfe3af59efd94734f8c)) - - -### Features - -* add x-explicitMappingOnly extension ([#1215](https://github.com/Redocly/redoc/issues/1215)) ([ea5b0aa](https://github.com/Redocly/redoc/commit/ea5b0aabf9133d11d3a8fcb79f9515d21e0d7ac0)) - - - -# [2.0.0-rc.24](https://github.com/Redocly/redoc/compare/v2.0.0-rc.23...v2.0.0-rc.24) (2020-03-17) - - -### Bug Fixes - -* Add debounce for 300 ms when searching ([#1089](https://github.com/Redocly/redoc/issues/1089)) ([373f018](https://github.com/Redocly/redoc/commit/373f018d0c183f83d07a4dbad4a4e2c9ab159f69)) -* do not load SearchWorker if disableSearch is `true` ([#1191](https://github.com/Redocly/redoc/issues/1191)) ([af415e8](https://github.com/Redocly/redoc/commit/af415e89e8c074a3f7c84f76f24020a7bd545483)), closes [#764](https://github.com/Redocly/redoc/issues/764) -* fix major search performance due to wrong marker element ([8c053cc](https://github.com/Redocly/redoc/commit/8c053cc474e88befc3338307317c0702d212d4c3)), closes [#1109](https://github.com/Redocly/redoc/issues/1109) - - -### Features - -* new option expandSingleSchemaField ([7608800](https://github.com/Redocly/redoc/commit/7608800d0acaa2fa0099dc840e17cd5aa90b54ca)) - - - -# [2.0.0-rc.23](https://github.com/Redocly/redoc/compare/v2.0.0-rc.22...v2.0.0-rc.23) (2020-02-09) - - -### Bug Fixes - -* fix broken sticky sidebar in Chrome 80 ([1a2a7dd](https://github.com/Redocly/redoc/commit/1a2a7dd8331cedd6ced4c18accf0b417549b3ff3)), closes [#1167](https://github.com/Redocly/redoc/issues/1167) - - - -# [2.0.0-rc.22](https://github.com/Redocly/redoc/compare/v2.0.0-rc.21...v2.0.0-rc.22) (2020-01-15) - - -### Bug Fixes - -* do not process oneOf if inherited from parent with discriminator ([5248415](https://github.com/Redocly/redoc/commit/52484157912d908daea8255d0b7d684b33258d7a)) - - -### Features - -* add HTTP syntax highlighting ([#1157](https://github.com/Redocly/redoc/issues/1157)) ([27a4af7](https://github.com/Redocly/redoc/commit/27a4af707686d56280753473b4294ee4af096534)) - - - -# [2.0.0-rc.21](https://github.com/Redocly/redoc/compare/v2.0.0-rc.20...v2.0.0-rc.21) (2020-01-10) - - -### Bug Fixes - -* empty servers behavior per OAS spec ([ed1db0c](https://github.com/Redocly/redoc/commit/ed1db0c9027087ae0ae923e390e3e1d638a647ae)), closes [#1151](https://github.com/Redocly/redoc/issues/1151) -* fix duplicated content in tags when using md headings ([a260c84](https://github.com/Redocly/redoc/commit/a260c8414c34a259a70a20ebcd20ecbb06c3d250)), closes [#1150](https://github.com/Redocly/redoc/issues/1150) [#1152](https://github.com/Redocly/redoc/issues/1152) -* use mobile menu background color value from theme ([#1144](https://github.com/Redocly/redoc/issues/1144)) ([41a9b3c](https://github.com/Redocly/redoc/commit/41a9b3c18228d236d182d3c15c9abc35ae72a0d5)) - - - -# [2.0.0-rc.20](https://github.com/Redocly/redoc/compare/v2.0.0-rc.19...v2.0.0-rc.20) (2019-12-13) - - -### Bug Fixes - -* fix missing parameters ([942d782](https://github.com/Redocly/redoc/commit/942d782b5a8d08767a7538741b75587cf1e67f44)), closes [#1142](https://github.com/Redocly/redoc/issues/1142) - - - -# [2.0.0-rc.19](https://github.com/Redocly/redoc/compare/v2.0.0-rc.18...v2.0.0-rc.19) (2019-12-13) - - -### Bug Fixes - -* change the title of "Security Scheme Type" to match "HTTP Authorization Scheme" ([#1126](https://github.com/Redocly/redoc/issues/1126)) ([289c8e6](https://github.com/Redocly/redoc/commit/289c8e6ae1ff00371f86d3f2646607c64bc30050)) -* do not URI-encode parameter values for better readability ([6aeb0bf](https://github.com/Redocly/redoc/commit/6aeb0bf68df3f03f2ca1317f8b5787545bd363f1)), closes [#1138](https://github.com/Redocly/redoc/issues/1138) -* fix sortByRequired (stabilise sort) ([#1136](https://github.com/Redocly/redoc/issues/1136)) ([d92434d](https://github.com/Redocly/redoc/commit/d92434d11b08e8b0f6be5453ec69aa1d0e0df79f)), closes [#1104](https://github.com/Redocly/redoc/issues/1104) [#1121](https://github.com/Redocly/redoc/issues/1121) [#1061](https://github.com/Redocly/redoc/issues/1061) -* h2 padding on mobile ([7ed1a7e](https://github.com/Redocly/redoc/commit/7ed1a7ef0e7978a0dfb40afcc72c3362466f9624)), closes [#1118](https://github.com/Redocly/redoc/issues/1118) -* python comment stripped in headings ([4a25aae](https://github.com/Redocly/redoc/commit/4a25aaef69fad814836392ea7e41eb32c182a261)), closes [#1116](https://github.com/Redocly/redoc/issues/1116) -* remove hardcoded fontFamily for oneOf labels ([094ce91](https://github.com/Redocly/redoc/commit/094ce914e3f9cfe567b39db4ea88208014d8b686)), closes [#1120](https://github.com/Redocly/redoc/issues/1120) -* search-box use theme ([1bf490c](https://github.com/Redocly/redoc/commit/1bf490c05b343d262f8819bf1ddc433e070be1b9)) -* support discriminator mapping 1-n ([6e390f9](https://github.com/Redocly/redoc/commit/6e390f9c7909da0b5d1d6fc571ab4ad92e715d6e)), closes [#1111](https://github.com/Redocly/redoc/issues/1111) -* wrap json examples in code tag ([#1064](https://github.com/Redocly/redoc/issues/1064)) ([dc5430e](https://github.com/Redocly/redoc/commit/dc5430e53def780a81612d269cc3aea3f8785eea)) - - -### Features - -* display `multipleOf` constrains ([#1065](https://github.com/Redocly/redoc/issues/1065)) ([3e90133](https://github.com/Redocly/redoc/commit/3e901336643b988ae45ae86c485005b8865e6e04)) -* enable menuToggle by default ([5d81abe](https://github.com/Redocly/redoc/commit/5d81abeb28c1e4f2826e41424c10163834c37e45)) -* new option hideSchemaTitles ([11cc4c4](https://github.com/Redocly/redoc/commit/11cc4c4c3e04a7e5bf3a9ebba20d10fa882a49e5)) -* new option payloadSampleIdx ([eaaa99d](https://github.com/Redocly/redoc/commit/eaaa99d68e2392273e8d9c0173db3b546e035d5f)) -* **cli:** Fallback on the spec's title before falling back on… ([#1073](https://github.com/Redocly/redoc/issues/1073)) ([e01eea4](https://github.com/Redocly/redoc/commit/e01eea445c93d74b66533c860d76bb3aff4d6df2)) - - - -# [2.0.0-rc.18](https://github.com/Redocly/redoc/compare/v2.0.0-rc.17...v2.0.0-rc.18) (2019-10-16) - - -### Bug Fixes - -* add oneOf buttons vertical space when wrapped to new line ([cd9fd61](https://github.com/Redocly/redoc/commit/cd9fd61)) -* improve mime-type dropdown font ([ce885f8](https://github.com/Redocly/redoc/commit/ce885f8)) - - - -# [2.0.0-rc.17](https://github.com/Redocly/redoc/compare/v2.0.0-rc.16...v2.0.0-rc.17) (2019-10-16) - - -### Bug Fixes - -* active menu item scroll into view ([0a01e9a](https://github.com/Redocly/redoc/commit/0a01e9a)) -* changed several components style font-family to monospace ([#1063](https://github.com/Redocly/redoc/issues/1063)) ([0c20e64](https://github.com/Redocly/redoc/commit/0c20e64)), closes [#909](https://github.com/Redocly/redoc/issues/909) -* no quotes for default values in header fields. ([#1059](https://github.com/Redocly/redoc/issues/1059)) ([b5af71d](https://github.com/Redocly/redoc/commit/b5af71d)) -* types over-pluralization ([#1057](https://github.com/Redocly/redoc/issues/1057)) ([4494f80](https://github.com/Redocly/redoc/commit/4494f80)), closes [#1053](https://github.com/Redocly/redoc/issues/1053) - - -### Features - -* added support for file paths as --options cli argument ([#1049](https://github.com/Redocly/redoc/issues/1049)) ([4adb927](https://github.com/Redocly/redoc/commit/4adb927)) - - - -# [2.0.0-rc.16](https://github.com/Redocly/redoc/compare/v2.0.0-rc.15...v2.0.0-rc.16) (2019-09-30) - - -### Bug Fixes - -* fix scrollYOffset when SSR ([d09c1c1](https://github.com/Redocly/redoc/commit/d09c1c1)) - - - -# [2.0.0-rc.15](https://github.com/Redocly/redoc/compare/v2.0.0-rc.14...v2.0.0-rc.15) (2019-09-30) - - -### Bug Fixes - -* auth section appears twice ([5aa7784](https://github.com/Redocly/redoc/commit/5aa7784)), closes [#818](https://github.com/Redocly/redoc/issues/818) -* clicking on group title breaks first tag ([4649683](https://github.com/Redocly/redoc/commit/4649683)), closes [#1034](https://github.com/Redocly/redoc/issues/1034) -* do not crash on empty scopes ([e787d9e](https://github.com/Redocly/redoc/commit/e787d9e)), closes [#1044](https://github.com/Redocly/redoc/issues/1044) -* false-positive recursive detection with allOf at the same level ([faa74d6](https://github.com/Redocly/redoc/commit/faa74d6)) -* fix scrollYOffset when SSR ([21258a5](https://github.com/Redocly/redoc/commit/21258a5)) -* left menu item before group is not highlighted ([67e2a8f](https://github.com/Redocly/redoc/commit/67e2a8f)), closes [#1033](https://github.com/Redocly/redoc/issues/1033) -* remove excessive whitespace between md sections on small screens ([e318fb3](https://github.com/Redocly/redoc/commit/e318fb3)), closes [#874](https://github.com/Redocly/redoc/issues/874) -* use url-template dependency ([#1008](https://github.com/Redocly/redoc/issues/1008)) ([32a464a](https://github.com/Redocly/redoc/commit/32a464a)), closes [#1007](https://github.com/Redocly/redoc/issues/1007) - - -### Features - -* **cli:** added support for JSON string value for --options CLI argument ([#1047](https://github.com/Redocly/redoc/issues/1047)) ([2a28130](https://github.com/Redocly/redoc/commit/2a28130)), closes [#797](https://github.com/Redocly/redoc/issues/797) -* **cli:** add `disableGoogleFont` parameter to cli ([#1045](https://github.com/Redocly/redoc/issues/1045)) ([aceb343](https://github.com/Redocly/redoc/commit/aceb343)) -* new option expandDefaultServerVariables ([#1014](https://github.com/Redocly/redoc/issues/1014)) ([0360dce](https://github.com/Redocly/redoc/commit/0360dce)) - - - - -# [2.0.0-rc.14](https://github.com/Redocly/redoc/compare/v2.0.0-rc.13...v2.0.0-rc.14) (2019-08-07) - - -### Bug Fixes - -* fix escaping JSON string values ([58cb20d](https://github.com/Redocly/redoc/commit/58cb20d)), closes [#999](https://github.com/Redocly/redoc/issues/999) -* revert expanding default server variables ([7849f7f](https://github.com/Redocly/redoc/commit/7849f7f)) - - - -# [2.0.0-rc.13](https://github.com/Redocly/redoc/compare/v2.0.0-rc.12...v2.0.0-rc.13) (2019-08-01) - - -### Bug Fixes - -* enum list doesn't wrap ([bfbb0c1](https://github.com/Redocly/redoc/commit/bfbb0c1)), closes [#993](https://github.com/Redocly/redoc/issues/993) -* incorrect serialization of some parameter samples ([aba45db](https://github.com/Redocly/redoc/commit/aba45db)), closes [#992](https://github.com/Redocly/redoc/issues/992) -* support json serialization for parameter examples ([1367380](https://github.com/Redocly/redoc/commit/1367380)), closes [#934](https://github.com/Redocly/redoc/issues/934) -* unify accordion icons for responses section ([2afc2e4](https://github.com/Redocly/redoc/commit/2afc2e4)), closes [#975](https://github.com/Redocly/redoc/issues/975) -* update to core.js 3 ([9e3375d](https://github.com/Redocly/redoc/commit/9e3375d)), closes [#997](https://github.com/Redocly/redoc/issues/997) - - - -# [2.0.0-rc.12](https://github.com/Redocly/redoc/compare/v2.0.0-rc.11...v2.0.0-rc.12) (2019-07-30) - - -### Bug Fixes - -* rename ObjectDescription to SchemaDefinition as discussed ([4496622](https://github.com/Redocly/redoc/commit/4496622)) - - - -# [2.0.0-rc.11](https://github.com/Redocly/redoc/compare/v2.0.0-rc.10...v2.0.0-rc.11) (2019-07-30) - - -### Bug Fixes - -* do not add extra slashes to pattern ([70d1ee9](https://github.com/Redocly/redoc/commit/70d1ee9)), closes [#983](https://github.com/Redocly/redoc/issues/983) -* dropdown fixes related to object description ([0504ad4](https://github.com/Redocly/redoc/commit/0504ad4)) -* incorrect serialization of parameter sample with hyphen ([f7dd658](https://github.com/Redocly/redoc/commit/f7dd658)) -* redoc-cli: Add missing content type header on compressed responses of `/` path - - -### Features - -* menu items from tags + md extension for Schema Definition ([#681](https://github.com/Redocly/redoc/pull/681)) -* new option `menuToggle` - fold active MenuItem if clicked ([#963](https://github.com/Redocly/redoc/issues/963)) -* Add option for skipping quotes in enums `enumSkipQuotes` ([#968](https://github.com/Redocly/redoc/issues/968)) ([afc7e36](https://github.com/Redocly/redoc/commit/afc7e36)) -* add `sampleCollapseLevel` option ([#937](https://github.com/Redocly/redoc/issues/937)) ([d3f1c16](https://github.com/Redocly/redoc/commit/d3f1c16)) - -# [2.0.0-rc.10](https://github.com/Redocly/redoc/compare/v2.0.0-rc.9...v2.0.0-rc.10) (2019-07-08) - - -### Bug Fixes - -* broken headings with single quote ([51d3b9b](https://github.com/Redocly/redoc/commit/51d3b9b)), closes [#955](https://github.com/Redocly/redoc/issues/955) -* fix fields table overflow if deeply nested with long title ([12b7057](https://github.com/Redocly/redoc/commit/12b7057)) -* hide empty example when it is not defined ([4bd499f](https://github.com/Redocly/redoc/commit/4bd499f)) -* markdown in examples descriptions + minor ui tweaks ([f52d9e8](https://github.com/Redocly/redoc/commit/f52d9e8)) -* organize response examples in dropdown and display description ([995e557](https://github.com/Redocly/redoc/commit/995e557)) - - - -# [2.0.0-rc.9](https://github.com/Redocly/redoc/compare/v2.0.0-rc.8-1...v2.0.0-rc.9) (2019-06-27) - - -### Bug Fixes - -* fix regression double slashes added to full URL display ([f29a4fe](https://github.com/Redocly/redoc/commit/f29a4fe)) -* IE11, add missing Object.assign polyfill ([888f04e](https://github.com/Redocly/redoc/commit/888f04e)) -* serialize parameter example values according to the spec ([#917](https://github.com/Redocly/redoc/issues/917)) ([3939286](https://github.com/Redocly/redoc/commit/3939286)) -* styled-component style error in tabs ([#946](https://github.com/Redocly/redoc/issues/946)) ([c488bbf](https://github.com/Redocly/redoc/commit/c488bbf)) - - -### Features - -* add x-additionalPropertiesName ([#622](https://github.com/Redocly/redoc/issues/622)) ([#944](https://github.com/Redocly/redoc/issues/944)) ([0eb1e66](https://github.com/Redocly/redoc/commit/0eb1e66)) - - - -# [2.0.0-rc.8-1](https://github.com/Rebilly/ReDoc/compare/v2.0.0-rc.8...v2.0.0-rc.8-1) (2019-05-13) - - -### Bug Fixes - -* crash with empty servers with redoc-cli ([3d52b39](https://github.com/Rebilly/ReDoc/commit/3d52b39)) - - - -# [2.0.0-rc.8](https://github.com/Rebilly/ReDoc/compare/v2.0.0-rc.7...v2.0.0-rc.8) (2019-05-13) - - -### Bug Fixes - -* fix broken CLI again ([4e12b5d](https://github.com/Rebilly/ReDoc/commit/4e12b5d)) -* fix logo gutter bg ([81896d3](https://github.com/Rebilly/ReDoc/commit/81896d3)) - - - -# [2.0.0-rc.7](https://github.com/Rebilly/ReDoc/compare/v2.0.0-rc.6...v2.0.0-rc.7) (2019-05-13) - - -### Bug Fixes - -* crash in node due to broken URL parsing ([8df2b97](https://github.com/Rebilly/ReDoc/commit/8df2b97)) - - - -# [2.0.0-rc.6](https://github.com/Rebilly/ReDoc/compare/v2.0.0-rc.5...v2.0.0-rc.6) (2019-05-13) - - -### Bug Fixes - -* broken schema tables with long enums ([3a74b74](https://github.com/Rebilly/ReDoc/commit/3a74b74)) -* deep linking sometimes not working when sent over messengers ([2491d97](https://github.com/Rebilly/ReDoc/commit/2491d97)) - - - -# [2.0.0-rc.5](https://github.com/Rebilly/ReDoc/compare/v2.0.0-rc.4...v2.0.0-rc.5) (2019-05-13) - - -### Bug Fixes - -* change fontFamily for EndpointInfo ([#866](https://github.com/Rebilly/ReDoc/issues/866)) ([851b133](https://github.com/Rebilly/ReDoc/commit/851b133)) -* clean up field values display ([#855](https://github.com/Rebilly/ReDoc/issues/855)) ([5c91590](https://github.com/Rebilly/ReDoc/commit/5c91590)) -* discriminator and oneOf title fix ([a3d7d7a](https://github.com/Rebilly/ReDoc/commit/a3d7d7a)) -* encode x-www-form-urlencoded examples correctly ([65930ad](https://github.com/Rebilly/ReDoc/commit/65930ad)), closes [#870](https://github.com/Rebilly/ReDoc/issues/870) -* fix redoc-cli broken dependencies ([81a7568](https://github.com/Rebilly/ReDoc/commit/81a7568)) -* IE11 add missing fetch and URL polyfills ([d2ce1bd](https://github.com/Rebilly/ReDoc/commit/d2ce1bd)), closes [#875](https://github.com/Rebilly/ReDoc/issues/875) -* ignore empty x-tagGroups array ([#869](https://github.com/Rebilly/ReDoc/issues/869)) ([4366a0d](https://github.com/Rebilly/ReDoc/commit/4366a0d)) -* incorrect detected schema title for deeply inherited schemas ([7d7b4e3](https://github.com/Rebilly/ReDoc/commit/7d7b4e3)) -* pluralize array of types ([fdcac30](https://github.com/Rebilly/ReDoc/commit/fdcac30)) -* remove huge space after Authentication section ([548fae3](https://github.com/Rebilly/ReDoc/commit/548fae3)), closes [#872](https://github.com/Rebilly/ReDoc/issues/872) -* remove query string from server URL ([#895](https://github.com/Rebilly/ReDoc/issues/895)) ([64453ff](https://github.com/Rebilly/ReDoc/commit/64453ff)) -* remove tabs top margin ([5c187f3](https://github.com/Rebilly/ReDoc/commit/5c187f3)) -* right panel code samples bg color ([de2aed2](https://github.com/Rebilly/ReDoc/commit/de2aed2)) -* tidy up non-redoc vendor extension presentation ([#847](https://github.com/Rebilly/ReDoc/issues/847)) ([b21cd3d](https://github.com/Rebilly/ReDoc/commit/b21cd3d)) -* update apiKey in to be titleize ([#902](https://github.com/Rebilly/ReDoc/issues/902)) ([35df477](https://github.com/Rebilly/ReDoc/commit/35df477)) -* **cli:** add node-libs-browser to the deps ([6c79901](https://github.com/Rebilly/ReDoc/commit/6c79901)), closes [#850](https://github.com/Rebilly/ReDoc/issues/850) - - -### Features - -* add hideSingleRequestSampleTab option ([4550e4d](https://github.com/Rebilly/ReDoc/commit/4550e4d)) -* add lineHeight config for headings ([#894](https://github.com/Rebilly/ReDoc/issues/894)) ([5dd5d6d](https://github.com/Rebilly/ReDoc/commit/5dd5d6d)) -* basic UI labels configuration ([b0e660e](https://github.com/Rebilly/ReDoc/commit/b0e660e)). Can be used for translations later. -* add logo gutter to the theme ([82c0cb1a](https://github.com/Rebilly/ReDoc/commit/82c0cb1a)). - -# [2.0.0-rc.4](https://github.com/Rebilly/ReDoc/compare/v2.0.0-rc.3...v2.0.0-rc.4) (2019-03-15) - - -### Bug Fixes - -* move swagger2openapi to deps because of missing transitive deps ([ed9b878](https://github.com/Rebilly/ReDoc/commit/ed9b878)) - - -### Features - -* display requestBody description [#833](https://github.com/Rebilly/ReDoc/issues/833) ([#838](https://github.com/Rebilly/ReDoc/issues/838)) ([56ca371](https://github.com/Rebilly/ReDoc/commit/56ca371)) - - -# [2.0.0-rc.3](https://github.com/Rebilly/ReDoc/compare/v2.0.0-rc.2...v2.0.0-rc.3) (2019-03-15) - - -### Bug Fixes - -* add extra deref step for anyOf/oneOf variants ([d81b631](https://github.com/Rebilly/ReDoc/commit/d81b631)), closes [#810](https://github.com/Rebilly/ReDoc/issues/810) -* duplicate keys in request samples ([3ce5bff](https://github.com/Rebilly/ReDoc/commit/3ce5bff)), closes [#815](https://github.com/Rebilly/ReDoc/issues/815) -* escape backslashes in string literals ([#823](https://github.com/Rebilly/ReDoc/issues/823)) ([70faca1](https://github.com/Rebilly/ReDoc/commit/70faca1)), closes [#822](https://github.com/Rebilly/ReDoc/issues/822) -* escape quotes in string values ([0473165](https://github.com/Rebilly/ReDoc/commit/0473165)), closes [#882](https://github.com/Rebilly/ReDoc/issues/882) -* pin lunr version in ReDoc ([178ff4c](https://github.com/Rebilly/ReDoc/commit/178ff4c)), closes [#844](https://github.com/Rebilly/ReDoc/issues/844) -* set last section min-height ([4dd79cd](https://github.com/Rebilly/ReDoc/commit/4dd79cd)), closes [#820](https://github.com/Rebilly/ReDoc/issues/820) - - -### Features - -* support externalValue for examples ([2cdfcd2](https://github.com/Rebilly/ReDoc/commit/2cdfcd2)), closes [#551](https://github.com/Rebilly/ReDoc/issues/551) [#840](https://github.com/Rebilly/ReDoc/issues/840) -* **cli:** Add templateOptions param to pass additional data to custom template ([#792](https://github.com/Rebilly/ReDoc/issues/792)) ([4e8ee03](https://github.com/Rebilly/ReDoc/commit/4e8ee03)) - - - -# [2.0.0-rc.2](https://github.com/Rebilly/ReDoc/compare/v2.0.0-rc.1...v2.0.0-rc.2) (2019-01-27) - - -### Bug Fixes - -* make padding for md code blocks and code samples consistent ([007752d](https://github.com/Rebilly/ReDoc/commit/007752d)) -* make syntax highlighting for md js code blocks same as for payload samples ([d197c0f](https://github.com/Rebilly/ReDoc/commit/d197c0f)) -* Only display API version if present ([#773](https://github.com/Rebilly/ReDoc/issues/773)) ([fb3cb36](https://github.com/Rebilly/ReDoc/commit/fb3cb36)) - - - -# [2.0.0-rc.1](https://github.com/Rebilly/ReDoc/compare/v2.0.0-rc.0...v2.0.0-rc.1) (2019-01-17) - - -### Bug Fixes - -* allow docker container serving under non-root URLs ([#731](https://github.com/Rebilly/ReDoc/issues/731)) ([cfb6f0f](https://github.com/Rebilly/ReDoc/commit/cfb6f0f)), closes [#730](https://github.com/Rebilly/ReDoc/issues/730) -* make example/defaults badge consistent with code blocks ([fa39ce4](https://github.com/Rebilly/ReDoc/commit/fa39ce4)) -* pattern constrain spacing ([c7436f2](https://github.com/Rebilly/ReDoc/commit/c7436f2)) -* sidebar navigation issues when scrollYOffset is float number ([c04f387](https://github.com/Rebilly/ReDoc/commit/c04f387)), closes [#748](https://github.com/Rebilly/ReDoc/issues/748) - - - -# [2.0.0-rc.0](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.41...v2.0.0-rc.0) (2018-11-27) - - -### Bug Fixes - -* false-positive recursive detection with oneOf ([59eaa8d](https://github.com/Rebilly/ReDoc/commit/59eaa8d)), closes [#723](https://github.com/Rebilly/ReDoc/issues/723) [#585](https://github.com/Rebilly/ReDoc/issues/585) -* fix hideHostname also hiding basePath ([b5f3224](https://github.com/Rebilly/ReDoc/commit/b5f3224)), closes [#677](https://github.com/Rebilly/ReDoc/issues/677) -* fix spacing with nested markdown lists ([f2f6909](https://github.com/Rebilly/ReDoc/commit/f2f6909)), closes [#718](https://github.com/Rebilly/ReDoc/issues/718) -* improve scrolling performance in Chrome with non-wrapped json examples ([a69c402](https://github.com/Rebilly/ReDoc/commit/a69c402)) -* nested oneOf button spacing ([3673720](https://github.com/Rebilly/ReDoc/commit/3673720)), closes [#719](https://github.com/Rebilly/ReDoc/issues/719) -* onLoaded callback not run on spec error ([e77df0c](https://github.com/Rebilly/ReDoc/commit/e77df0c)), closes [#690](https://github.com/Rebilly/ReDoc/issues/690) -* theme improvements by [@stasiukanya](https://github.com/stasiukanya) ([e2d0cd5](https://github.com/Rebilly/ReDoc/commit/e2d0cd5)) -* **cli:** old peer dependency issue with styled-components ([#699](https://github.com/Rebilly/ReDoc/issues/699)) ([9e2853c](https://github.com/Rebilly/ReDoc/commit/9e2853c)) - - -### Features - -* Add feature to specify href for logo explicitly ([#645](https://github.com/Rebilly/ReDoc/issues/645)) ([87fd7d7](https://github.com/Rebilly/ReDoc/commit/87fd7d7)) -* add support for markdown in Server Object ([155d214](https://github.com/Rebilly/ReDoc/commit/155d214)) -* Add support for minLength and maxLength constraint humanization ([#700](https://github.com/Rebilly/ReDoc/issues/700)) ([f40568b](https://github.com/Rebilly/ReDoc/commit/f40568b)), closes [#42](https://github.com/Rebilly/ReDoc/issues/42) [/github.com/Rebilly/ReDoc/issues/42#issuecomment-371883853](https://github.com//github.com/Rebilly/ReDoc/issues/42/issues/issuecomment-371883853) - - - - -# [2.0.0-alpha.41](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.40...v2.0.0-alpha.41) (2018-10-18) - - -### Bug Fixes - -* add null check in dispose method ([#675](https://github.com/Rebilly/ReDoc/issues/675)) ([6b7c5b7](https://github.com/Rebilly/ReDoc/commit/6b7c5b7)) -* extensionHook not being used ([a4a4013](https://github.com/Rebilly/ReDoc/commit/a4a4013)), closes [#665](https://github.com/Rebilly/ReDoc/issues/665) -* fix issue with broken markdown caused by marked bug ([70cf293](https://github.com/Rebilly/ReDoc/commit/70cf293)) - -### Peer dependencies updates - -* ReDoc now requires `styled-components@^4.0.1` to be installed if used as React component - - - - -# [2.0.0-alpha.40](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.39...v2.0.0-alpha.40) (2018-10-05) - - -### Bug Fixes - -* **cli:** add styled-components to dependencies ([2d63fa0](https://github.com/Rebilly/ReDoc/commit/2d63fa0)) -* allOf inside oneOf overwritten and not rendered ([fe3383d](https://github.com/Rebilly/ReDoc/commit/fe3383d)), closes [#660](https://github.com/Rebilly/ReDoc/issues/660) -* fix panel paddings on small screens ([f39fc98](https://github.com/Rebilly/ReDoc/commit/f39fc98)) -* minor media print improvements ([fbcec82](https://github.com/Rebilly/ReDoc/commit/fbcec82)) -* remove extra-padding caused by empty group sections ([974bc7d](https://github.com/Rebilly/ReDoc/commit/974bc7d)) -* server overriding didn't work on Path Item object ([355764d](https://github.com/Rebilly/ReDoc/commit/355764d)), closes [#656](https://github.com/Rebilly/ReDoc/issues/656) - - -### Features - -* new option `onlyRequiredInSamples` ([#646](https://github.com/Rebilly/ReDoc/issues/646)) ([10bca66](https://github.com/Rebilly/ReDoc/commit/10bca66)) -* new option `sortPropsAlphabetically` ([b87cf0d](https://github.com/Rebilly/ReDoc/commit/b87cf0d)) -* new theme options `spacing.sectionHorizontal` and `spacing.sectionVertical` ([505463f](https://github.com/Rebilly/ReDoc/commit/505463f)) -* turn off code-blocks wrapping (enable using `theme.typography.code.wrap: true`) ([393681b](https://github.com/Rebilly/ReDoc/commit/393681b)), closes [#658](https://github.com/Rebilly/ReDoc/issues/658) - - - - -# [2.0.0-alpha.39](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.38...v2.0.0-alpha.39) (2018-09-14) - - -### Bug Fixes - -* Increase badge size slightly so that "PATCH" method fits inside ([#632](https://github.com/Rebilly/ReDoc/issues/632)) ([4b3b5ba](https://github.com/Rebilly/ReDoc/commit/4b3b5ba)) - - -### Features - -* externalDocumentation rendered for tags, operations and schema fields ([#595](https://github.com/Rebilly/ReDoc/issues/595)) ([893c83e](https://github.com/Rebilly/ReDoc/commit/893c83e)), closes [#550](https://github.com/Rebilly/ReDoc/issues/550) - - - - -# [2.0.0-alpha.38](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.37...v2.0.0-alpha.38) (2018-08-24) - - -### Bug Fixes - -* add indent to array schema internals ([865f3ce](https://github.com/Rebilly/ReDoc/commit/865f3ce)) -* fix oneOf/anyOf titles ([39b930d](https://github.com/Rebilly/ReDoc/commit/39b930d)), closes [#618](https://github.com/Rebilly/ReDoc/issues/618) [#621](https://github.com/Rebilly/ReDoc/issues/621) - - - - -# [2.0.0-alpha.37](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.36...v2.0.0-alpha.37) (2018-08-22) - - -### Bug Fixes - -* do not inherit title in allOf ([720e282](https://github.com/Rebilly/ReDoc/commit/720e282)), closes [#601](https://github.com/Rebilly/ReDoc/issues/601) -* fix crash on empty media object ([fb21212](https://github.com/Rebilly/ReDoc/commit/fb21212)), closes [#608](https://github.com/Rebilly/ReDoc/issues/608) -* make http badges font-based instead of inline png ([5d84bd4](https://github.com/Rebilly/ReDoc/commit/5d84bd4)) -* use correct parent section for security definition ([f903406](https://github.com/Rebilly/ReDoc/commit/f903406)) - - - - -# [2.0.0-alpha.36](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.35...v2.0.0-alpha.36) (2018-08-11) - - -### Bug Fixes - -* broken rendering of code blocks with language in markdown ([8218a26](https://github.com/Rebilly/ReDoc/commit/8218a26)) -* broken rendering of headings with regexp characters ([e660517](https://github.com/Rebilly/ReDoc/commit/e660517)) - - - - -# [2.0.0-alpha.35](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.34...v2.0.0-alpha.35) (2018-08-09) - - -### Bug Fixes - -* crash on any backticks code block without lang specified ([58ae668](https://github.com/Rebilly/ReDoc/commit/58ae668)) -* fix auth requirements font size ([d13fe13](https://github.com/Rebilly/ReDoc/commit/d13fe13)) - - - -# [2.0.0-alpha.34](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.33...v2.0.0-alpha.34) (2018-08-08) - - -### Bug Fixes - -* add some spacing between operation description and parameters ([597688e](https://github.com/Rebilly/ReDoc/commit/597688e)) -* description is not rendered if doesn't contain markdown headings ([90ed717](https://github.com/Rebilly/ReDoc/commit/90ed717)), closes [#591](https://github.com/Rebilly/ReDoc/issues/591) -* download button downloads index.html instead of spec with CLI ([334f904](https://github.com/Rebilly/ReDoc/commit/334f904)), closes [#594](https://github.com/Rebilly/ReDoc/issues/594) -* fix Authentication section is not rendered ([2ecc8bc](https://github.com/Rebilly/ReDoc/commit/2ecc8bc)), closes [#590](https://github.com/Rebilly/ReDoc/issues/590) -* fix linebreaks in multiparagraph field descriptions ([8fb9cd6](https://github.com/Rebilly/ReDoc/commit/8fb9cd6)) -* preserve md heading level in description ([23559fb](https://github.com/Rebilly/ReDoc/commit/23559fb)) -* render additionalProperties set to true ([#597](https://github.com/Rebilly/ReDoc/issues/597)) ([f70ac08](https://github.com/Rebilly/ReDoc/commit/f70ac08)), closes [#596](https://github.com/Rebilly/ReDoc/issues/596) -* schemes without type: object are not expandable ([97e1620](https://github.com/Rebilly/ReDoc/commit/97e1620)), closes [#599](https://github.com/Rebilly/ReDoc/issues/599) - - -### Features - -* Add x-logo alt text support ([#584](https://github.com/Rebilly/ReDoc/issues/584)) ([568ce74](https://github.com/Rebilly/ReDoc/commit/568ce74)), closes [#546](https://github.com/Rebilly/ReDoc/issues/546) -* support label for x-code-samples ([00bd966](https://github.com/Rebilly/ReDoc/commit/00bd966)), closes [#586](https://github.com/Rebilly/ReDoc/issues/586) - - - - -# [2.0.0-alpha.33](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.32...v2.0.0-alpha.33) (2018-07-31) - - -### Bug Fixes - -* long endpoint url overflow ([d99e918](https://github.com/Rebilly/ReDoc/commit/d99e918)) -* allow word-break in code strings in md ([15dfe44](https://github.com/Rebilly/ReDoc/commit/15dfe44)) -* show examples for response headers ([ba22b1e](https://github.com/Rebilly/ReDoc/commit/ba22b1e)) - - -# [2.0.0-alpha.32](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.31...v2.0.0-alpha.32) (2018-07-26) - - -### Bug Fixes - -* **cli:** add mobx to dependencies ([75ced44](https://github.com/Rebilly/ReDoc/commit/75ced44)) -* fix resolving issue by upgrading to json-schema-ref-parser@5.1.1 ([0045958](https://github.com/Rebilly/ReDoc/commit/0045958)), closes [#541](https://github.com/Rebilly/ReDoc/issues/541) -* remove break-all from code samples ([d74578d](https://github.com/Rebilly/ReDoc/commit/d74578d)) -* wrong display when combining multiple auth requirements ([f96c481](https://github.com/Rebilly/ReDoc/commit/f96c481)), closes [#577](https://github.com/Rebilly/ReDoc/issues/577) - - - - -# [2.0.0-alpha.31](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.30...v2.0.0-alpha.31) (2018-07-23) - - -### Bug Fixes - -* server url contains spec name if not specified in the spec ([b41b181](https://github.com/Rebilly/ReDoc/commit/b41b181)) - - -### Features - -* simple variable substitution support ([9d6b30c](https://github.com/Rebilly/ReDoc/commit/9d6b30c)), closes [#565](https://github.com/Rebilly/ReDoc/issues/565) - - - - -# [2.0.0-alpha.30](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.29...v2.0.0-alpha.30) (2018-07-19) - - -### Bug Fixes - -* fix usage with CRA by transpiling swagger2openapi deps ([6473e62](https://github.com/Rebilly/ReDoc/commit/6473e62)), closes [#566](https://github.com/Rebilly/ReDoc/issues/566) - - -### Features - -* theme reshape and new options ([58bddc8](https://github.com/Rebilly/ReDoc/commit/58bddc8)) - - - - -# [2.0.0-alpha.29](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.28...v2.0.0-alpha.29) (2018-07-18) - - -### Bug Fixes - -* **cli:** cli output crashes if script closing tag is in the spec ([76906eb](https://github.com/Rebilly/ReDoc/commit/76906eb)), closes [#563](https://github.com/Rebilly/ReDoc/issues/563) -* different output of cli bundle and redoc ([89aa754](https://github.com/Rebilly/ReDoc/commit/89aa754)), closes [#547](https://github.com/Rebilly/ReDoc/issues/547) -* fix broken link in CLI help ([bab3e7d](https://github.com/Rebilly/ReDoc/commit/bab3e7d)), closes [#559](https://github.com/Rebilly/ReDoc/issues/559) -* fix Download button url when spec as object was provided ([c35925a](https://github.com/Rebilly/ReDoc/commit/c35925a)), closes [#462](https://github.com/Rebilly/ReDoc/issues/462) [#540](https://github.com/Rebilly/ReDoc/issues/540) -* fix non-scalar query/path/header params are not expandable ([dcca44a](https://github.com/Rebilly/ReDoc/commit/dcca44a)), closes [#561](https://github.com/Rebilly/ReDoc/issues/561) -* properly host oneOf inside allOf ([7e5b6d9](https://github.com/Rebilly/ReDoc/commit/7e5b6d9)), closes [#507](https://github.com/Rebilly/ReDoc/issues/507) [#528](https://github.com/Rebilly/ReDoc/issues/528) -* regression - broken urls for operations without operationId ([c0c44bc](https://github.com/Rebilly/ReDoc/commit/c0c44bc)) -* use original tag name when slugified one is not valid ([#553](https://github.com/Rebilly/ReDoc/issues/553)) ([8817d9c](https://github.com/Rebilly/ReDoc/commit/8817d9c)) - - -### Features - -* new option disableSearch ([d4ab5ad](https://github.com/Rebilly/ReDoc/commit/d4ab5ad)) - - - - -# [2.0.0-alpha.28](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.27...v2.0.0-alpha.28) (2018-06-29) - - -### Bug Fixes - -* inline markdown regression ([e1c9e19](https://github.com/Rebilly/ReDoc/commit/e1c9e19)) - - - - -# [2.0.0-alpha.27](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.25...v2.0.0-alpha.27) (2018-06-29) - - -### Bug Fixes - -* change default font weight to 400 ([11947ed](https://github.com/Rebilly/ReDoc/commit/11947ed)) -* do not uppercase menu items by default ([0d45cc2](https://github.com/Rebilly/ReDoc/commit/0d45cc2)) -* fix link colors in json samples ([aaaa899](https://github.com/Rebilly/ReDoc/commit/aaaa899)) - - -### Features - -* display Value instead of Enum for one-item enum ([78fa312](https://github.com/Rebilly/ReDoc/commit/78fa312)) -* experimental temporary support for tags in md ([06ef51c](https://github.com/Rebilly/ReDoc/commit/06ef51c)) -* theme hooks experimental hooks ([55bd853](https://github.com/Rebilly/ReDoc/commit/55bd853)) - - - - -# [2.0.0-alpha.26](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2018-06-28) - - -### Bug Fixes - -* change default font weight to 400 ([11947ed](https://github.com/Rebilly/ReDoc/commit/11947ed)) -* do not uppercase menu items by default ([0d45cc2](https://github.com/Rebilly/ReDoc/commit/0d45cc2)) -* fix link colors in json samples ([aaaa899](https://github.com/Rebilly/ReDoc/commit/aaaa899)) - - -### Features - -* display Value instead of Enum for one-item enum ([78fa312](https://github.com/Rebilly/ReDoc/commit/78fa312)) -* experimental temporary support for tags in md ([06ef51c](https://github.com/Rebilly/ReDoc/commit/06ef51c)) - - - - -# [2.0.0-alpha.24](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.23...v2.0.0-alpha.24) (2018-06-01) - - -### Bug Fixes - -* temporary downgrade marked as it introduced breaking changes and a few bugs ([902f97a](https://github.com/Rebilly/ReDoc/commit/902f97a)) - - - - -# [2.0.0-alpha.23](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.22...v2.0.0-alpha.23) (2018-05-31) - - -### Bug Fixes - -* **cli:** make positional arguments required and handle errors in serve and bundle manually ([#518](https://github.com/Rebilly/ReDoc/issues/518)) ([370d08a](https://github.com/Rebilly/ReDoc/commit/370d08a)) -* fix typings on npm ([d957ad7](https://github.com/Rebilly/ReDoc/commit/d957ad7)) -* fix vertical line misaligned in firefox ([bde08f1](https://github.com/Rebilly/ReDoc/commit/bde08f1)), closes [#503](https://github.com/Rebilly/ReDoc/issues/503) -* mergeAllOf takes items into account ([#511](https://github.com/Rebilly/ReDoc/issues/511)) ([47b2177](https://github.com/Rebilly/ReDoc/commit/47b2177)) - - - - -# [2.0.0-alpha.22](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.21...v2.0.0-alpha.22) (2018-05-29) - - -### Bug Fixes - -* **cli:** create directories when a path is specified in the --output option ([#513](https://github.com/Rebilly/ReDoc/issues/513)) ([ac7372b](https://github.com/Rebilly/ReDoc/commit/ac7372b)), closes [#512](https://github.com/Rebilly/ReDoc/issues/512) -* **cli:** return 1 as exit code if an error happens in the cli ([#516](https://github.com/Rebilly/ReDoc/issues/516)) ([720c304](https://github.com/Rebilly/ReDoc/commit/720c304)) -* fix font-weight inconsistency ([6ea2b7b](https://github.com/Rebilly/ReDoc/commit/6ea2b7b)), closes [#506](https://github.com/Rebilly/ReDoc/issues/506) -* HEAD http verb support in menu badges ([2eb1952](https://github.com/Rebilly/ReDoc/commit/2eb1952)), closes [#493](https://github.com/Rebilly/ReDoc/issues/493) -* more descriptive message for wrong discriminator use ([3c6de2c](https://github.com/Rebilly/ReDoc/commit/3c6de2c)), closes [#505](https://github.com/Rebilly/ReDoc/issues/505) - - -### Features - -* add new experimental option unstable_ignoreMimeParameters ([d162bab](https://github.com/Rebilly/ReDoc/commit/d162bab)) -* support x-discriminator for OpenAPI 2 ([aaff311](https://github.com/Rebilly/ReDoc/commit/aaff311)), closes [#496](https://github.com/Rebilly/ReDoc/issues/496) - - - - -# [2.0.0-alpha.21](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.20...v2.0.0-alpha.21) (2018-05-28) - - -### Bug Fixes - -* add tslib dependency ([8e1a5cb](https://github.com/Rebilly/ReDoc/commit/8e1a5cb)) -* **cli:** escape \u2029 \u2028 characters ([5018473](https://github.com/Rebilly/ReDoc/commit/5018473)), closes [#475](https://github.com/Rebilly/ReDoc/issues/475) -* reduce search index size ([a1fa4b4](https://github.com/Rebilly/ReDoc/commit/a1fa4b4)) -* replace "oops" with field name 🙈 ([6b1e8e7](https://github.com/Rebilly/ReDoc/commit/6b1e8e7)) -* specify caption-side ([64801b0](https://github.com/Rebilly/ReDoc/commit/64801b0)), closes [#509](https://github.com/Rebilly/ReDoc/issues/509) - - -### Features - -* export TypeScript typings ([9115be8](https://github.com/Rebilly/ReDoc/commit/9115be8)) -* new theme colors: code and codeBg ([f8b793d](https://github.com/Rebilly/ReDoc/commit/f8b793d)) -* new theme option: nestingSpacing ([782ef77](https://github.com/Rebilly/ReDoc/commit/782ef77)) - - - - -# [2.0.0-alpha.20](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.19...v2.0.0-alpha.20) (2018-05-14) - - -### Bug Fixes - -* fix worker is not defined in lib bundle ([6a5513e](https://github.com/Rebilly/ReDoc/commit/6a5513e)) - - - - -# [2.0.0-alpha.19](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.18...v2.0.0-alpha.19) (2018-05-14) - - -### Bug Fixes - -* change look of additionalProperties ([126c6a6](https://github.com/Rebilly/ReDoc/commit/126c6a6)) -* disable chrome tap-highlight on mobile ([09cbe88](https://github.com/Rebilly/ReDoc/commit/09cbe88)) -* fix [@observer](https://github.com/observer) on PureComponent warning ([afb11d6](https://github.com/Rebilly/ReDoc/commit/afb11d6)) -* fix build caused by new babel decorators syntax, fixes [#487](https://github.com/Rebilly/ReDoc/issues/487) ([01f575c](https://github.com/Rebilly/ReDoc/commit/01f575c)) -* fix prism lang dependencies, fixes [#467](https://github.com/Rebilly/ReDoc/issues/467) ([42cf18e](https://github.com/Rebilly/ReDoc/commit/42cf18e)) -* fix spelling in error message ([#455](https://github.com/Rebilly/ReDoc/issues/455)) ([64119c4](https://github.com/Rebilly/ReDoc/commit/64119c4)) -* limit height of discriminator dropdown, fixes [#484](https://github.com/Rebilly/ReDoc/issues/484) ([6d1a9e5](https://github.com/Rebilly/ReDoc/commit/6d1a9e5)) -* path parameters are not correctly override, fixes [#481](https://github.com/Rebilly/ReDoc/issues/481) ([2cf4c3c](https://github.com/Rebilly/ReDoc/commit/2cf4c3c)) - - -### Features - -* display scope description as markdown, fixes [#466](https://github.com/Rebilly/ReDoc/issues/466) ([0d6deff](https://github.com/Rebilly/ReDoc/commit/0d6deff)) - - - - -# [2.0.0-alpha.18](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.17...v2.0.0-alpha.18) (2018-03-23) - - -### Bug Fixes - -* fix logo width ([384c883](https://github.com/Rebilly/ReDoc/commit/384c883)) -* modify the peerDependencies to reflect the need for react 16.3 ([b29c329](https://github.com/Rebilly/ReDoc/commit/b29c329)) -* scroll to section sooner when SSR + simplify item ids ([d1d8042](https://github.com/Rebilly/ReDoc/commit/d1d8042)) -* **cli:** don't wait for content loaded in bundled HTML ([d9ee2d0](https://github.com/Rebilly/ReDoc/commit/d9ee2d0)) - - -# [2.0.0-alpha.17](https://github.com/Rebilly/ReDoc/compare/v2.0.0-alpha.16...v2.0.0-alpha.17) (2018-03-21) - - -### Bug Fixes - -* css fix + update theme ([05403a7](https://github.com/Rebilly/ReDoc/commit/05403a7)) -* **cli:** allow to set url to the spec in SSR mode ([c9c6bc5](https://github.com/Rebilly/ReDoc/commit/c9c6bc5)) -* **cli:** fix crash ([8891f5c](https://github.com/Rebilly/ReDoc/commit/8891f5c)) -* **cli:** fix output option type ([c729c6c](https://github.com/Rebilly/ReDoc/commit/c729c6c)) -* **cli:** rename redoc-cli bin ([06b5a00](https://github.com/Rebilly/ReDoc/commit/06b5a00)) -* fix second-level heading in description ([a084532](https://github.com/Rebilly/ReDoc/commit/a084532)) -* make field type color more dark (closes [#439](https://github.com/Rebilly/ReDoc/issues/439)) ([d27e61a](https://github.com/Rebilly/ReDoc/commit/d27e61a)) - - -### Features - -* **cli:** add --template option ([b7afce9](https://github.com/Rebilly/ReDoc/commit/b7afce9)) -* **cli:** add options to specify redoc options ([2732c89](https://github.com/Rebilly/ReDoc/commit/2732c89)) -* **cli:** add title option to bundle ([bb8a678](https://github.com/Rebilly/ReDoc/commit/bb8a678)) -* add more options to theme ([cbce28a](https://github.com/Rebilly/ReDoc/commit/cbce28a)) - - - - -## [1.21.2](https://github.com/Rebilly/ReDoc/compare/v1.21.1...v1.21.2) (2018-02-26) - - -### Bug Fixes - -* missing properties when using complex allOf (regression) ([6ce9245](https://github.com/Rebilly/ReDoc/commit/6ce9245)), closes [#422](https://github.com/Rebilly/ReDoc/issues/422) - - - - -## [1.21.1](https://github.com/Rebilly/ReDoc/compare/v1.21.0...v1.21.1) (2018-02-23) - - -### Bug Fixes - -* avoid endless recursion in schema-walker in some cases ([309cc23](https://github.com/Rebilly/ReDoc/commit/309cc23)), closes [#418](https://github.com/Rebilly/ReDoc/issues/418) [#395](https://github.com/Rebilly/ReDoc/issues/395) -* fix crash when discriminator is used incorrectly ([b1d928d](https://github.com/Rebilly/ReDoc/commit/b1d928d)) - - - - -# [1.21.0](https://github.com/Rebilly/ReDoc/compare/v1.20.0...v1.21.0) (2018-02-18) - - -### Bug Fixes - -* null example not used in schema samples ([420c51a](https://github.com/Rebilly/ReDoc/commit/420c51a)), closes [#415](https://github.com/Rebilly/ReDoc/issues/415) - - -### Features - -* new option hide-download-button ([454e5bd](https://github.com/Rebilly/ReDoc/commit/454e5bd)), closes [#394](https://github.com/Rebilly/ReDoc/issues/394) - - - - -## [1.20.0](https://github.com/Rebilly/ReDoc/compare/v1.19.3...v1.20.0) (2018-01-21) - - -### Bug Fixes - -* Path parameters are not correctly overridden ([c406dc5](https://github.com/Rebilly/ReDoc/commit/c406dc5)), closes [#400](https://github.com/Rebilly/ReDoc/issues/400) -* Use parentNode instead of parentElement to fix IE11 crash ([e8adb60](https://github.com/Rebilly/ReDoc/commit/e8adb60)), closes [#406](https://github.com/Rebilly/ReDoc/issues/406) - - -### Features - -* align parameters to match up ([#375](https://github.com/Rebilly/ReDoc/issues/375)) ([d083c16](https://github.com/Rebilly/ReDoc/commit/d083c16)) - -### Deprecations -* Dropped bower support. No more dist files on the `releases` branch. - - - - -# [2.0.0-alpha.15](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.14...v2.0.0-alpha.15) (2018-03-16) - - -### Bug Fixes - -* fix broken css after installing polished ([6018042](https://github.com/Rebilly/Redoc/commit/6018042)) - - -### Features - -* more advanced theme engine ([1df690a](https://github.com/Rebilly/Redoc/commit/1df690a)) - - - - -# [2.0.0-alpha.14](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.13...v2.0.0-alpha.14) (2018-03-15) - - -### Bug Fixes - -* fix CLI crash + build it on travis ([7769ba8](https://github.com/Rebilly/Redoc/commit/7769ba8)) - - - - -# [2.0.0-alpha.13](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.12...v2.0.0-alpha.13) (2018-03-15) - - -### Bug Fixes - -* A couple minor bug fixes ([#436](https://github.com/Rebilly/Redoc/issues/436)) ([5dc21af](https://github.com/Rebilly/Redoc/commit/5dc21af)) -* add extra null-check + warning ([8757fa5](https://github.com/Rebilly/Redoc/commit/8757fa5)) -* add logo width to the theme ([28f2391](https://github.com/Rebilly/Redoc/commit/28f2391)) -* align logo by center ([18ec3ac](https://github.com/Rebilly/Redoc/commit/18ec3ac)) -* discriminator dropdown showing incorrect field if sorted ([bcf39dc](https://github.com/Rebilly/Redoc/commit/bcf39dc)) -* fix crash when referencing non-existing security scheme ([1f7fc44](https://github.com/Rebilly/Redoc/commit/1f7fc44)) -* fix overflowing content in JSON samples ([02c2413](https://github.com/Rebilly/Redoc/commit/02c2413)) -* fix right-panel blinking when scrolling + css improvements ([a78f9ab](https://github.com/Rebilly/Redoc/commit/a78f9ab)) -* fix search-indexing for SSR ([1428fb5](https://github.com/Rebilly/Redoc/commit/1428fb5)) -* fix the media queries utils so it gets the values from the current theme ([#420](https://github.com/Rebilly/Redoc/issues/420)) ([3924d3c](https://github.com/Rebilly/Redoc/commit/3924d3c)) -* fix worker import ([4896346](https://github.com/Rebilly/Redoc/commit/4896346)) -* make ReactStandalone react on props changes ([0cb0af2](https://github.com/Rebilly/Redoc/commit/0cb0af2)) -* merge inner properties of allOf ([8926dd4](https://github.com/Rebilly/Redoc/commit/8926dd4)) -* one-of dropdown not switching ([0f1b6a6](https://github.com/Rebilly/Redoc/commit/0f1b6a6)) -* referenced header name is empty ([13165fb](https://github.com/Rebilly/Redoc/commit/13165fb)) -* skipReadOnly/skipWritOnly not passing down to nested array ([6df8127](https://github.com/Rebilly/Redoc/commit/6df8127)) -* skipReadOnly/skipWritOnly not passing down to nested OneOf ([2462639](https://github.com/Rebilly/Redoc/commit/2462639)) -* various search fixes ([b797c96](https://github.com/Rebilly/Redoc/commit/b797c96)) -* writeOnly not respected in response samples ([87abdf7](https://github.com/Rebilly/Redoc/commit/87abdf7)) - - -### Features - -* add clear icon to searchbox ([825162e](https://github.com/Rebilly/Redoc/commit/825162e)) -* add hideDownloadButton option ([8dbe938](https://github.com/Rebilly/Redoc/commit/8dbe938)) -* add marker ([1ff2bd8](https://github.com/Rebilly/Redoc/commit/1ff2bd8)) -* arrow navigation in search results ([fe3245a](https://github.com/Rebilly/Redoc/commit/fe3245a)) -* basis search ([6990cd2](https://github.com/Rebilly/Redoc/commit/6990cd2)) -* ReDoc CLI ✨ ([390f6c1](https://github.com/Rebilly/Redoc/commit/390f6c1)) -* reqired-first sort order for params ([ecf33d2](https://github.com/Rebilly/Redoc/commit/ecf33d2)) -* serialize search-index ([e94f842](https://github.com/Rebilly/Redoc/commit/e94f842)) - - - - -# [2.0.0-alpha.12](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.11...v2.0.0-alpha.12) (2018-02-07) - - -### Bug Fixes - -* basic responsiveness ([a29c3cc](https://github.com/Rebilly/Redoc/commit/a29c3cc)) -* crash in MarkdownRenderer on non-string ([dead161](https://github.com/Rebilly/Redoc/commit/dead161)) -* discriminator fix ([ff3bb24](https://github.com/Rebilly/Redoc/commit/ff3bb24)) -* filter out non-existing security schemas + warn ([ee822f6](https://github.com/Rebilly/Redoc/commit/ee822f6)) -* fix oneOf title for array ([1f3701d](https://github.com/Rebilly/Redoc/commit/1f3701d)) -* fix tbody > tr nesting warning ([a3cbb14](https://github.com/Rebilly/Redoc/commit/a3cbb14)) -* improve copy tooltip perf ([29207cf](https://github.com/Rebilly/Redoc/commit/29207cf)) -* resolve menu synchronization issue (use proper throttle) ([84d1c7b](https://github.com/Rebilly/Redoc/commit/84d1c7b)) - - -### Features - -* responsive side menu ([3aab2d9](https://github.com/Rebilly/Redoc/commit/3aab2d9)) - - - - -# [2.0.0-alpha.11](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.10...v2.0.0-alpha.11) (2018-01-29) - - -### Bug Fixes - -* courier misspelling ([#409](https://github.com/Rebilly/Redoc/issues/409)) ([96fb7ce](https://github.com/Rebilly/Redoc/commit/96fb7ce)) -* crash on 2-level md heading at the beginning ([e9f23f7](https://github.com/Rebilly/Redoc/commit/e9f23f7)) -* make active tab more clear ([4b5df22](https://github.com/Rebilly/Redoc/commit/4b5df22)) -* perfect scroll not working ([199f240](https://github.com/Rebilly/Redoc/commit/199f240)) -* use array items example ([12f79f0](https://github.com/Rebilly/Redoc/commit/12f79f0)), closes [#408](https://github.com/Rebilly/Redoc/issues/408) -* wrap text in code samples ([6c71a66](https://github.com/Rebilly/Redoc/commit/6c71a66)) - - -### Features - -* port "copy to clipboard" / "expand/collapse all" functionality ([5bb0bdf](https://github.com/Rebilly/Redoc/commit/5bb0bdf)), closes [#410](https://github.com/Rebilly/Redoc/issues/410) - - - - -# [2.0.0-alpha.9](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.8...v2.0.0-alpha.9) (2018-01-11) - - -### Bug Fixes - -* handle scrollYOffset in ScrollService ([dcab770](https://github.com/Rebilly/Redoc/commit/dcab770)) - - - - -# [2.0.0-alpha.8](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.7...v2.0.0-alpha.8) (2018-01-10) - - -### Bug Fixes - -* undo section id + some minor fixes ([0253c5d](https://github.com/Rebilly/Redoc/commit/0253c5d)) - - - - -# [2.0.0-alpha.7](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.6...v2.0.0-alpha.7) (2018-01-10) - - -### Bug Fixes - -* add id attr to headers to work before react is loaded if ssr ([1743453](https://github.com/Rebilly/Redoc/commit/1743453)) -* crate spec as data/base64 link when ssr ([33678e6](https://github.com/Rebilly/Redoc/commit/33678e6)) -* example value is not showed if it is false ([9756364](https://github.com/Rebilly/Redoc/commit/9756364)) - - - - -# [2.0.0-alpha.6](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.5...v2.0.0-alpha.6) (2018-01-10) - - -### Bug Fixes - -* allOf and deref exit not only named refs ([435cccd](https://github.com/Rebilly/Redoc/commit/435cccd)) -* do not ignore path level parameters ([14f8408](https://github.com/Rebilly/Redoc/commit/14f8408)) -* improve rendering of types ([17da7b7](https://github.com/Rebilly/Redoc/commit/17da7b7)) -* move title propagation to the correct place ([0b0bc99](https://github.com/Rebilly/Redoc/commit/0b0bc99)) -* overwrite text-align to left ([bfee3ed](https://github.com/Rebilly/Redoc/commit/bfee3ed)) - - -### Features - -* initial display security requirements ([50e2a58](https://github.com/Rebilly/Redoc/commit/50e2a58)) - - - - -# [2.0.0-alpha.5](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.4...v2.0.0-alpha.5) (2017-12-07) - - -### Bug Fixes - -* correct pointer for the schema ([4ae1574](https://github.com/Rebilly/Redoc/commit/4ae1574)) -* bundle in reftools in lib build (do not crash on prod builds in create-react-app) ([57129d3](https://github.com/Rebilly/Redoc/commit/57129d3)) - - - -# [2.0.0-alpha.4](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.3...v2.0.0-alpha.4) (2017-11-24) - - -### Bug Fixes - -* add ellipsis for menu items with long words ([3421be2](https://github.com/Rebilly/Redoc/commit/3421be2)) -* crashes on some dereferencing/allOf merging cases ([335deb9](https://github.com/Rebilly/Redoc/commit/335deb9)) -* do not auto-append security-definitions if they are not in the spec ([426e5b6](https://github.com/Rebilly/Redoc/commit/426e5b6)) -* don't display operations without tags as tag items in menu ([ca81b6d](https://github.com/Rebilly/Redoc/commit/ca81b6d)) - - - - -# [2.0.0-alpha.3](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2017-11-23) - - -### Bug Fixes - -* crash when $ref is url encoded ([bdf6079](https://github.com/Rebilly/Redoc/commit/bdf6079)) -* make oneOf not skip fields defined alongside ([8680775](https://github.com/Rebilly/Redoc/commit/8680775)) - - - - -# 2.0.0-alpha.2 (2017-11-23) - -### Bug Fixes -* Fix crash when using type `file` in OpenAPI 2.0 in some places - - -# 2.0.0-alpha.1 (2017-11-23) - -Complete rewrite of ReDoc using React so here only major changes are listed. -Complete rewrite also means that this rewrite may introduce issues, but they should be resolved before `2.0.0`. - -### Features - -- Basic Support for OpenAPI 3 -- Usage as a React component - -### Deprecations - -- Fonts are not loaded by ReDoc so you should load them. Default fonts can be loaded as below: - -```html - -``` -- no more bower releases -- no more GitHub pages-based CDN. Use [unpkg.com](https://unpkg.com/) to access ReDoc releases - - -### Known Regression (resolved before leaving alpha stage) -- `lazyLoading` option not implemented yet -- Copying to clipboard of samples not implemented yet -- Search not implemented yet - - -## [1.19.3](https://github.com/Rebilly/ReDoc/compare/v1.19.2...v1.19.3) (2017-11-16) - - -### Bug Fixes - -* html characters not escaped in code blocks (fixes [#378](https://github.com/Rebilly/ReDoc/issues/378)) ([fef9ec4](https://github.com/Rebilly/ReDoc/commit/fef9ec4)) - - - -## [1.19.2](https://github.com/Rebilly/ReDoc/compare/v1.19.1...v1.19.2) (2017-11-10) - - -### Bug Fixes - -* response samples doesn't show only text/plain (fixes [#371](https://github.com/Rebilly/ReDoc/issues/371)) ([00aea06](https://github.com/Rebilly/ReDoc/commit/00aea06)) - - - -# [1.19.1](https://github.com/Rebilly/ReDoc/compare/v1.19.0...v1.19.1) (2017-10-02) - -# [2.0.0-alpha.16](https://github.com/Rebilly/Redoc/compare/v2.0.0-alpha.15...v2.0.0-alpha.16) (2018-03-18) - - -### Bug Fixes - -* move cli to a separate npm package ([95c7585](https://github.com/Rebilly/Redoc/commit/95c7585)) -* prefer `.extend` over `styled()` to make styles more predictable ([ed20ac1](https://github.com/Rebilly/Redoc/commit/ed20ac1)) - - -### Features - -* use new Context API for options ([e022349](https://github.com/Rebilly/Redoc/commit/e022349)) - - - -# [1.19.0](https://github.com/Rebilly/ReDoc/compare/v1.18.1...v1.19.0) (2017-09-21) - - -### Bug Fixes - -* Clearly label version compatibility ([8d849a6](https://github.com/Rebilly/ReDoc/commit/8d849a6)), closes [#338](https://github.com/Rebilly/ReDoc/issues/338) -* HEAD http verb support ([d8b6e02](https://github.com/Rebilly/ReDoc/commit/d8b6e02)), closes [#342](https://github.com/Rebilly/ReDoc/issues/342) - - -### Features - -* add ignoredHeaderParameters option ([56d62e5](https://github.com/Rebilly/ReDoc/commit/56d62e5)) -* add native-scrollbars option to workaround scrolling perf issues ([f2ed92c](https://github.com/Rebilly/ReDoc/commit/f2ed92c)) - - - -## [1.18.1](https://github.com/Rebilly/ReDoc/compare/v1.17.0...v1.18.1) (2017-08-28) - - -### Bug Fixes - -* crash if `contact` is not in the spec ([1b9ba0d](https://github.com/Rebilly/ReDoc/commit/1b9ba0d)), closes [#332](https://github.com/Rebilly/ReDoc/issues/332) - - - -# [1.18.0](https://github.com/Rebilly/ReDoc/compare/v1.16.1...v1.18.0) (2017-08-28) - - -### Bug Fixes - -* increase padding top for `.api-info-wrapper` when left sidebar is hiding to avoid header overlaying by top menu ([514fc29](https://github.com/Rebilly/ReDoc/commit/514fc29)) -* add `display: inline-block` for `.openapi-button` ([86b4db4](https://github.com/Rebilly/ReDoc/commit/86b4db4)), -closes [#321](https://github.com/Rebilly/ReDoc/issues/321) -* add margins around list-items in markdown ([b165785](https://github.com/Rebilly/ReDoc/commit/b165785)) - -### Features - -* generate download link for specs defined by an object ([60e8cb4](https://github.com/Rebilly/ReDoc/commit/60e8cb4)), closes [#289](https://github.com/Rebilly/ReDoc/issues/289) -* support text-plain response sample ([b84177c](https://github.com/Rebilly/ReDoc/commit/b84177c)), closes [#270](https://github.com/Rebilly/ReDoc/issues/270) -* clickable logo that points to specific url ([cb3d318](https://github.com/Rebilly/ReDoc/commit/cb3d318)), closes -[#322](https://github.com/Rebilly/ReDoc/issues/322) -* support x-example for parameters ([f792273](https://github.com/Rebilly/ReDoc/commit/f792273)), closes -[#297](https://github.com/Rebilly/ReDoc/issues/297) - - -# [1.17.0](https://github.com/Rebilly/ReDoc/compare/v1.16.1...v1.17.0) (2017-08-02) - - -### Bug Fixes - -* copy code-samples included \n\r characters ([cd962fa](https://github.com/Rebilly/ReDoc/commit/cd962fa)), closes [#296](https://github.com/Rebilly/ReDoc/issues/296) -* enum with single value not shown in non-body params ([87d9abd](https://github.com/Rebilly/ReDoc/commit/87d9abd)), closes [#284](https://github.com/Rebilly/ReDoc/issues/284) -* handle case where items is array in indexer ([5e5db72](https://github.com/Rebilly/ReDoc/commit/5e5db72)), closes [#304](https://github.com/Rebilly/ReDoc/issues/304) -* output dates as ISO 8601 strings in JSON Formatter ([#313](https://github.com/Rebilly/ReDoc/issues/313)) ([86d8179](https://github.com/Rebilly/ReDoc/commit/86d8179)) -* make padding between h2 sections smaller ([2c89536](https://github.com/Rebilly/ReDoc/commit/2c89536)), closes [#291](https://github.com/Rebilly/ReDoc/issues/291) -* ready-only for nested objects samples ([be41d6d](https://github.com/Rebilly/ReDoc/commit/be41d6d)), closes [#300](https://github.com/Rebilly/ReDoc/issues/300) - - -### Features - -* add `hide-loading` option ([2ebca4b](https://github.com/Rebilly/ReDoc/commit/2ebca4b)), closes [#315](https://github.com/Rebilly/ReDoc/issues/315) -* add special rendering for deprecated operations ([#290](https://github.com/Rebilly/ReDoc/issues/290)) ([2748aac](https://github.com/Rebilly/ReDoc/commit/2748aac)) -* export angular module ** ([ef5101b](https://github.com/Rebilly/ReDoc/commit/ef5101b)) -* support for xml samples in response when there is no schema in response ([eb7089b](https://github.com/Rebilly/ReDoc/commit/eb7089b)), closes [#307](https://github.com/Rebilly/ReDoc/issues/307) - - - - -# [1.16.0](https://github.com/Rebilly/ReDoc/compare/v1.15.0...v1.16.0) (2017-05-12) - - -### Bug Fixes - -* do not show discriminator dropdown if it is empty ([7a5d315](https://github.com/Rebilly/ReDoc/commit/7a5d315)) -* prevent possible XSS using `untrusted-spec` option ([c0698bb](https://github.com/Rebilly/ReDoc/commit/c0698bb)) -* URL changes so fast ([131b437](https://github.com/Rebilly/ReDoc/commit/131b437)), closes [#252](https://github.com/Rebilly/ReDoc/issues/252) - - -### Features - -* display xml examples if present in response examples ([cb106cc](https://github.com/Rebilly/ReDoc/commit/cb106cc)) - - - -# [1.15.0](https://github.com/Rebilly/ReDoc/compare/v1.14.0...v1.15.0) (2017-05-05) - - -### Bug Fixes - -* menu items not full-width on short item names ([ef1b2bd](https://github.com/Rebilly/ReDoc/commit/ef1b2bd)) -* menu service subscription leak ([bb00dc3](https://github.com/Rebilly/ReDoc/commit/bb00dc3)) -* openapi button: add `download` attribute ([583c571](https://github.com/Rebilly/ReDoc/commit/583c571)) -* sample unavailable when no schema in response object ([1eedbfe](https://github.com/Rebilly/ReDoc/commit/1eedbfe)) -* Slugifying non-ascii headers make duplicate permalinks ([#264](https://github.com/Rebilly/ReDoc/issues/264)) ([6edbbe7](https://github.com/Rebilly/ReDoc/commit/6edbbe7)) -* typo in download button classname (thanks [@dwilding](https://github.com/dwilding)) ([6b363a5](https://github.com/Rebilly/ReDoc/commit/6b363a5)) -* firefox and IE scroll sync after deps update ([ad04636](https://github.com/Rebilly/ReDoc/commit/ad04636)) - - - -### Features - -* add triangle icon for expandable menu items ([e7130d2](https://github.com/Rebilly/ReDoc/commit/e7130d2)) -* clear button (x) in search box ([0341db4](https://github.com/Rebilly/ReDoc/commit/0341db4)) - - - -# [1.14.0](https://github.com/Rebilly/ReDoc/compare/v1.13.0...v1.14.0) (2017-04-23) - - -### Bug Fixes - -* don't show download button if initialized with an object ([476d6c4](https://github.com/Rebilly/ReDoc/commit/476d6c4)) -* endpoint link doesn't expand when click on arrow ([9248cc2](https://github.com/Rebilly/ReDoc/commit/9248cc2)) -* markdown block text color 💅 ([0f6f035](https://github.com/Rebilly/ReDoc/commit/0f6f035)), closes [#255](https://github.com/Rebilly/ReDoc/issues/255) -* ReDoc removes path if site is using history API ([c77e1a2](https://github.com/Rebilly/ReDoc/commit/c77e1a2)), closes [#257](https://github.com/Rebilly/ReDoc/issues/257) -* remove trailing slash from url when use `x-servers` ([2760a34](https://github.com/Rebilly/ReDoc/commit/2760a34)) -* subscription leak in side-menu ([838f233](https://github.com/Rebilly/ReDoc/commit/838f233)) - - -### Features - -* add GH-like anchors to h1 and h2 headings in md ([bb3667d](https://github.com/Rebilly/ReDoc/commit/bb3667d)) -* add perfect-scrollbar for side menu ([cdeee67](https://github.com/Rebilly/ReDoc/commit/cdeee67)) -* emphasize path with primary color in servers dropdown ([388b3d4](https://github.com/Rebilly/ReDoc/commit/388b3d4)) -* new option `path-in-middle-panel` ([74a3193](https://github.com/Rebilly/ReDoc/commit/74a3193)) -* SideMenu to support items template as a parameter ([8a49fb3](https://github.com/Rebilly/ReDoc/commit/8a49fb3)) - - - -# 1.13.0 (2017-04-19) - - -### Bug Fixes - -* fix issue with loading https spec ([585b9cf](https://github.com/Rebilly/ReDoc/commit/585b9cf)), closes [#243](https://github.com/Rebilly/ReDoc/issues/243) (by Khoa Tran) -* UL missing css ([303b49e](https://github.com/Rebilly/ReDoc/commit/303b49e)), closes [#248](https://github.com/Rebilly/ReDoc/issues/248) -* don't show contact info if it is empty object ([6077cc6](https://github.com/Rebilly/ReDoc/commit/6077cc6)) -* code block formatting in markdown list ([a9cad19](https://github.com/Rebilly/ReDoc/commit/a9cad19)), closes [#242](https://github.com/Rebilly/ReDoc/issues/242) - -### Features - -* HTTP verbs badges in side menu ([92eec25](https://github.com/Rebilly/ReDoc/commit/92eec25)), closes [#61](https://github.com/Rebilly/ReDoc/issues/61) -* HTTP verbs badges in search results ([61fd426](https://github.com/Rebilly/ReDoc/commit/61fd426)) -* new option [`no-auto-auth`](https://github.com/Rebilly/ReDoc#redoc-tag-attributes) to disable authentication section auto adding ([00b304a](https://github.com/Rebilly/ReDoc/commit/00b304a)) - - -# 1.12.1 (2017-04-19) - - -### Bug Fixes - -* fix: use replace state instead of pushState ([4f4e748](https://github.com/Rebilly/ReDoc/commit/4f4e748)), closes [#244](https://github.com/Rebilly/ReDoc/issues/244) - - -# 1.12.0 (2017-04-19) - - -### Bug Fixes - -* add safeguard for undefined ([aaac434](https://github.com/Rebilly/ReDoc/commit/aaac434)), closes [#236](https://github.com/Rebilly/ReDoc/issues/236) -* view errors were not reported ([6aa3a7d](https://github.com/Rebilly/ReDoc/commit/6aa3a7d)) - -### Features - -* Support x-examples vendor extension for requests (by [@brendo](https://github.com/brendo)) - -### Other - -* Updated to Angular 4, bundle is a bit smaller now - - -# 1.11.0 (2017-03-09) - - -### Bug Fixes - -* do not hang when swagger doesn't contain any paths ([e4f5388](https://github.com/Rebilly/ReDoc/commit/e4f5388)), closes [#216](https://github.com/Rebilly/ReDoc/issues/216) -[#201](https://github.com/Rebilly/ReDoc/issues/201) -* optimize and support inherited discriminator ([64e5741](https://github.com/Rebilly/ReDoc/commit/64e5741)) -* redoc hangs when indexing recursive discriminator-based definitions ([1e96f88](https://github.com/Rebilly/ReDoc/commit/1e96f88)) -* wrong warnings for $ref not single ([193f4bf](https://github.com/Rebilly/ReDoc/commit/193f4bf)), closes [#221](https://github.com/Rebilly/ReDoc/issues/221) -* x-extendedDiscriminator not working ([4899f3e](https://github.com/Rebilly/ReDoc/commit/4899f3e)), closes [#217](https://github.com/Rebilly/ReDoc/issues/217) - - -### Features - -* copy pretty-printed JSON ([e99d66d](https://github.com/Rebilly/ReDoc/commit/e99d66d)), closes [#219](https://github.com/Rebilly/ReDoc/issues/219) -* support for OpenAPI object as a parameter for `init` ([d99f256](https://github.com/Rebilly/ReDoc/commit/d99f256)), closes [#224](https://github.com/Rebilly/ReDoc/issues/224) - - -## 1.10.2 (2017-03-01) - -### Bug Fixes -* clear page fragment when scroll to the beginning -* update docs for x-tagGroup, add warning [#215](https://github.com/Rebilly/ReDoc/issues/215) -* show warning for non-used in tagGroup tags - - -## 1.10.1 (2017-02-27) - - -### Bug Fixes - -* improve x-servers dropdown animation performance ([69c7d98](https://github.com/Rebilly/ReDoc/commit/69c7d98)) - - - - -# 1.10.0 (2017-02-27) - - -### Bug Fixes -* Revert: remove unused hide-hostname option ([7031176](https://github.com/Rebilly/ReDoc/commit/7031176)) - -### Features - -* new option `required-props-first` ([c724df4](https://github.com/Rebilly/ReDoc/commit/c724df4)), closes [#191](https://github.com/Rebilly/ReDoc/issues/191) -* update fragment while scrolling and on menu clicks ([66c06b3](https://github.com/Rebilly/ReDoc/commit/66c06b3)), closes [#138](https://github.com/Rebilly/ReDoc/issues/138) [#202](https://github.com/Rebilly/ReDoc/issues/202) - - - - -# 1.9.0 (2017-02-25) - - -### Bug Fixes - -* do not crash if version is not string ([accd016](https://github.com/Rebilly/ReDoc/commit/accd016)), closes [#208](https://github.com/Rebilly/ReDoc/issues/208) -* long paths break EndpointLink ui ([8472045](https://github.com/Rebilly/ReDoc/commit/8472045)) -* remove unused hide-hostname option ([7031176](https://github.com/Rebilly/ReDoc/commit/7031176)) - - -### Features - -* Add support for `x-servers` ([fd49082](https://github.com/Rebilly/ReDoc/commit/fd49082)) -* Color of "default" Response depends on other successful responses are specified ([9d0dd25](https://github.com/Rebilly/ReDoc/commit/9d0dd25)), closes [#197](https://github.com/Rebilly/ReDoc/issues/197) -* improved type string with minLength == maxLength ([e76bcc3](https://github.com/Rebilly/ReDoc/commit/e76bcc3)), closes [#212](https://github.com/Rebilly/ReDoc/issues/212) -* show type string with minLength 1 as "non-empty" ([d175a4d](https://github.com/Rebilly/ReDoc/commit/d175a4d)), closes [#192](https://github.com/Rebilly/ReDoc/issues/192) - - - - -## 1.8.1 (2017-02-23) - - -### Bug Fixes -* Fix toggle icon width on IE, closes [#198](https://github.com/Rebilly/ReDoc/issues/198) -* Add safe guards array without items, closes [#199](https://github.com/Rebilly/ReDoc/issues/199) -* Fix extra slash if basePath is not present ([a5c03ab](https://github.com/Rebilly/ReDoc/commit/a5c03ab)), closes [#201](https://github.com/Rebilly/ReDoc/issues/201) -* response samples - render description as markdown ([4acfc11](https://github.com/Rebilly/ReDoc/commit/4acfc11)), closes [#190](https://github.com/Rebilly/ReDoc/issues/190) -* take snapshot of schema to not overwrite inlined references ([77bc3c4](https://github.com/Rebilly/ReDoc/commit/77bc3c4)), closes [#203](https://github.com/Rebilly/ReDoc/issues/203) -* use items description if not present on top level ([23e7847](https://github.com/Rebilly/ReDoc/commit/23e7847)) - - -### Features - -* autoscroll menu ([b43a87d](https://github.com/Rebilly/ReDoc/commit/b43a87d)) - - -# 1.8.0 (2017-02-03) -### Features/Improvements -* In-page search :tada: []#51](https://github.com/Rebilly/ReDoc/issues/51) -* Render externalDocs [#103](https://github.com/Rebilly/ReDoc/issues/103) -* Undeprecate x-traitTag - -### Bug fixes -* Tags with x-traitTag: true are now greyed out in ReDoc output bug [#194](https://github.com/Rebilly/ReDoc/issues/194) -* CSS: request body model-tree wrapping problem [#185](https://github.com/Rebilly/ReDoc/issues/185) -* Strange request to `example.com` causing CSP error [#178](https://github.com/Rebilly/ReDoc/issues/178) -* Fix latest empty menu-items not getting active [#194](https://github.com/Rebilly/ReDoc/issues/194) -* Fixed crash when level-2 heading goes before level-1 in description [#179](https://github.com/Rebilly/ReDoc/issues/179) (by [@jsmartfo](https://github.com/jsmartfo)) - -# 1.7.0 (2017-01-06) -### Features/Improvements -* Add support for grouping items in menu via [`x-tagGroups`](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-taggroups) -* Support inherited discriminator (only one at the moment) -* Add support for second-level headings from Markdown docs (by [@jaingaurav](https://github.com/jaingaurav)) - -### Bug fixes -* Fix response list for shared schemas (fixes [#177](https://github.com/Rebilly/ReDoc/issues/177)) -* Fix right panel overlaps site-footer - -# 1.6.4 (2016-12-28) -### Bug fixes -* Fix crash on MS Edge (fixes [#166](https://github.com/Rebilly/ReDoc/issues/166)) -* Uncomment animation after upgrade to the latest ng2 (resolves [#162](https://github.com/Rebilly/ReDoc/issues/162)) - -# 1.6.3 (2016-12-19) -### Bug fixes -* Disable side-menu animation (workaround for [#162](https://github.com/Rebilly/ReDoc/issues/162)) -* Use markdown for response description (fixes [#158](https://github.com/Rebilly/ReDoc/issues/158)) -* Fix leaks (fixes [#167](https://github.com/Rebilly/ReDoc/issues/167)) -* Update webpack and stick to ts@2.0.9 (fixes [#169](https://github.com/Rebilly/ReDoc/issues/169), [#168](https://github.com/Rebilly/ReDoc/issues/168)) - -### Features/Improvements -* add `expand-responses` option - specify which responses are expand by default ([#165](https://github.com/Rebilly/ReDoc/issues/165)). - -# 1.6.2 (2016-12-11) -### Bug fixes -* Use markdown in responses description ([#158](https://github.com/Rebilly/ReDoc/issues/158)) - -### Features/Improvements -* [x-displayName](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-displayname) for tags - by [@bfirsh](https://github.com/bfirsh) ([PR #152](https://github.com/Rebilly/ReDoc/pull/152)) - -# 1.6.1 (2016-12-02) -### Bug fixes -* Fix only the first instance of schema was rendered ([#150](https://github.com/Rebilly/ReDoc/issues/150)) -* Regression: fix side panel overlaps footer -* Fix menu was not initialized for specs without tags - -### Features/Improvements -* Don't show error screen for runtimes after render finished -* Updated dependencies (angular to the latest version + dev deps) - - -# 1.6.0 (2016-11-30) -### Bug fixes -* Update webpack to the latest beta ([#143](https://github.com/Rebilly/ReDoc/issues/143)) -* Fix read-only fields appear in request samples ([#142](https://github.com/Rebilly/ReDoc/issues/142)) -* A few more minor UI improvements - -### Features/Improvements -* Major performance optimization with new option `lazy-rendering` - -To enable use `` tag parameter: ``. -In this mode ReDoc shows initial screen ASAP and then renders the rest operations asynchronously while showing progress bar on the top. Check out [the demo](//rebilly.github.io/ReDoc) for the example. -* Enable cors-proxy for demo -* README: Add button link to yeoman-generator - -# 1.5.2 (2016-11-28) -### Bug fixes -* Fix crashing on array without items ([#104](https://github.com/Rebilly/ReDoc/issues/104)) -* Fix `allOf` within array items ([#136](https://github.com/Rebilly/ReDoc/issues/136)) -* Fix reference resolution from external files ([#96](https://github.com/Rebilly/ReDoc/issues/96)) -* Fix object to become an array ([#146](https://github.com/Rebilly/ReDoc/issues/146)) - -### Features/Improvements -* Add support for Swagger `collectionFormat` -* Wrap API version in span with class ([#145](https://github.com/Rebilly/ReDoc/issues/145)) -* Update openapi-sampler to 0.3.3 - -# 1.5.1 (2016-10-31) -### Bug fixes -* Fix content scrolling on language switch ([#130](https://github.com/Rebilly/ReDoc/issues/130)) - -### Features/Improvements -* Support for Swagger `pattern` property ([#42](https://github.com/Rebilly/ReDoc/issues/42)) -* Add option to hide hostname in method definition (by @bfirsh) -* Add Docker development environment (by @bfirsh) - -# 1.5.0 (2016-10-31) -### Bug fixes -* Fix side menu items wrong sync with description headers - -### Features/Improvements -* Support for Security Definitions -* Update angular2 to the 2.1.2 - -### Deprecations -* Deprecate `x-traitTag` - -### Code refactoring -* Separate RedocModule from AppModule -* Get rid of angular facade/lang dependencies -* Error handler refactor - -# 1.4.1 (2016-10-18) -### Bug fixes -* Emit helpers for module build - -# 1.4.0 (2016-10-14) -### Bug fixes -* Fix destroy/reinit -* Fix minimum/maximum zero not rendered ([#123](https://github.com/Rebilly/ReDoc/issues/123)) - -### Features/Improvements -* Do spec load after bootstrap -* Build and publish angular2 module ([#126](https://github.com/Rebilly/ReDoc/issues/126)) - -# 1.3.3 (2016-09-28) -### Features/Improvements -* Implemented x-extendedDiscriminator to workaround name clashes in big specs -* Add engines to package.json ([#83](https://github.com/Rebilly/ReDoc/issues/83)) -* Fix npm start on windows ([#119](https://github.com/Rebilly/ReDoc/issues/119), [#118](https://github.com/Rebilly/ReDoc/issues/118)) -* Update webpack to latest beta -* Update angular to 2.0.1 -* Update local dev steps -* Update openapi-sampler lib ([#111](https://github.com/Rebilly/ReDoc/issues/111)) - -# 1.3.2 (2016-09-13) -### Bug fixes -* Fix broken tabs styling for response samples -* Fix v1.x.x deployment - -# 1.3.1 (2016-09-13) -### Bug fixes -* Makes basePath optional (by @LeFnord) -* Fixed little typo (by @adamd) -* Typo s/IGNORRED/IGNORED (by @MikeRalphson) -* Fixed indentation (by @bennyn) -* Fix default hostname ([#108](https://github.com/Rebilly/ReDoc/issues/108)) -* Fix default value for falsy values is not displayed ([#109](https://github.com/Rebilly/ReDoc/issues/109)) -* Fix schema collapse after change discriminator - -### Features/Improvements -* Update to latest Angular RC.6 -* Smaller bundle size by removing esprima dep from bundle -* Updated dependencies - -# 1.3.0 (2016-08-31) -### Bug fixes -* Fix code samples are not shown for operations without body param ([#93](https://github.com/Rebilly/ReDoc/issues/93)) -* Fixed side menu overlapped site footer ([#75](https://github.com/Rebilly/ReDoc/issues/75)) -* Fix broken order in discriminator dropdown - -### Features/Improvements -* Support "x-nullable" property by @kedashoe ([#92](https://github.com/Rebilly/ReDoc/issues/92)) - -# 1.2.0 (2016-08-30) -### Bug fixes -* Fix sticky sidebar top sticking ([#75](https://github.com/Rebilly/ReDoc/issues/75)) -* Fix array inside objects if referenced directly ([#84](https://github.com/Rebilly/ReDoc/issues/84)) -* Add banner to the bundle file ([#89](https://github.com/Rebilly/ReDoc/issues/89)) -* Fix broken additionalProperties -* Fix version render issue (extra "v" letter) - -### Features/Improvements -* Change the way discriminator is rendered -* Created CDN major release 1.x.x ([#87](https://github.com/Rebilly/ReDoc/issues/87)) -* Smaller bundle size (371KB gzipped) -* Better start-up time due to [AoT](http://blog.mgechev.com/2016/08/14/ahead-of-time-compilation-angular-offline-precompilation/) - -### Code refactoring -* Moved build-system to Webpack -* Moved to latest Typescript + get rid of typings -* Upgrade to the latest Angular2 RC.5 - -# 1.1.2 (2016-08-21) -### Bug fixes -* Revert "Fix markdown newlines to be GFM" ([#82](https://github.com/Rebilly/ReDoc/issues/82)) -* Move license and contact info above description - -# 1.1.1 (2016-08-21) -### Bug fixes -* Fix markdown newlines to be GFM ([#82](https://github.com/Rebilly/ReDoc/issues/82)) -* Fix markdown code blocks in api description - -# 1.1.0 (2016-08-12) -### Bug fixes - -* Fix API description width on mobile -* Render valid JSON in samples (quoted object keys) - -### Features/Improvements - -* Add Tuple support (arrays with separate schema for each value) ([#69](https://github.com/Rebilly/ReDoc/issues/69)) -* Add special representation for enum with one value ([#70](https://github.com/Rebilly/ReDoc/issues/70)) -* Change `< * >` notation to `< anything >` - - -# 1.0.1 (2016-08-01) -### Bug fixes - -* Use api host if schema host is undefined diff --git a/LICENSE b/LICENSE index 20075d85..eaf0fa0e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ The MIT License (MIT) -Copyright (c) 2015-present, Rebilly, Inc. +Copyright (c) 2015-present, Rebilly, Inc. +Copyright (c) 2021-present, Redocly Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -19,4 +20,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/README.md b/README.md index cb79ec89..0077d589 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ By default Redoc offers a three-panel, responsive layout: If you want to see how Redoc renders your OpenAPI definition, you can try it out online at https://redocly.github.io/redoc/. -A version of the Swagger Petstore API is displayed by default. +A version of the Redocly Museum API is displayed by default. To test it with your own OpenAPI definition, enter the URL for your definition and select **TRY IT**. @@ -37,12 +37,12 @@ enter the URL for your definition and select **TRY IT**. - Ability to integrate your API introduction into the side menu - High-level grouping in side menu with the [`x-tagGroups`](https://redocly.com/docs/api-reference-docs/specification-extensions/x-tag-groups/) specification extension - [Simple integration with `create-react-app`](https://redocly.com/docs/redoc/quickstart/react/) -- Code samples support (with vendor extension)
- ![code samples in action](docs/images/code-samples-demo.gif) +- Code samples support (with the `x-codeSamples` specification extension)
+ ![code samples in action](https://raw.githubusercontent.com/Redocly/redoc/main/demo/code-samples-demo.gif) ## Usage -Redoc is provided as a CLI tool (also distributed as a Docker image), HTML tag, and React component. +Redoc Community Edition is available as an HTML tag, a React component, and via the Redocly CLI (also distributed as a Docker image). ### Generate documentation from the CLI @@ -73,20 +73,23 @@ Add your own `spec-url` to the `` tag; this attribute can also be a local Check out the [deployment documentation](./docs/deployment/intro.md) for more options, and detailed documentation for each. -## Redoc vs. Redocly API Reference +## Redoc CE vs. Redoc -Redoc is Redocly's community-edition product. Looking for something more? -We also offer [hosted API reference documentation](https://redocly.com/docs/api-registry/guides/api-registry-quickstart/) -with additional features including: +Redoc CE is Redocly's community-edition product. Looking for something more? +We also offer [Redoc](https://redocly.com/redoc) +with support specifications like GraphQL/AsyncAPI/SOAP and additional features including: -* Try-it console +* Try-it panel(Replay) * Automated code samples -* Pagination -* Extra theme options +* Mock server +* Full customization +* Lint + +For a detailed comparison of premium vs open source, see [Premium vs Open Source features](https://redocly.com/blog/premium-vs-open-source). ### Documentation and resources -- [Reference docs](https://redocly.com/docs/api-reference-docs/getting-started/) - we take care of the hosting +- [Realm + Reunite](https://redocly.com/docs/realm) - we take care of the hosting, which includes everything you need for documentation. - [Redoc](https://redocly.com/docs/redoc/) - detailed documentation for this open source project (also in the `docs/` folder) - [Command-line interface to bundle your docs into a web-ready HTML file](https://redocly.com/docs/cli/commands/build-docs/) - API linting, bundling, and much more with open source [Redocly CLI](https://redocly.com/docs/cli) @@ -117,6 +120,7 @@ Redoc uses the following [specification extensions](https://redocly.com/docs/api * [`x-traitTag`](docs/redoc-vendor-extensions.md#x-traitTag) - useful for tags that refer to non-navigation properties like Pagination, Rate-Limits, etc * [`x-codeSamples`](docs/redoc-vendor-extensions.md#x-codeSamples) - specify operation code samples * [`x-badges`](docs/redoc-vendor-extensions.md#x-badges) - specify operation badges +* ['x-enumDescriptions'](docs/redoc-vendor-extensions.md#x-enumDescriptions) - list of the enum values and descriptions to include in the documentation * [`x-examples`](docs/redoc-vendor-extensions.md#x-examples) - specify JSON example for requests * [`x-nullable`](docs/redoc-vendor-extensions.md#x-nullable) - mark schema param as a nullable * [`x-displayName`](docs/redoc-vendor-extensions.md#x-displayname) - specify human-friendly names for the menu categories @@ -130,8 +134,12 @@ Redoc uses the following [specification extensions](https://redocly.com/docs/api **The README for the `1.x` version is on the [v1.x](https://github.com/Redocly/redoc/tree/v1.x) branch.** -All the 2.x releases are deployed to npm and can be used with Redocly-cdn: -- particular release, for example, `v2.0.0`: https://cdn.redoc.ly/redoc/v2.0.0/bundles/redoc.standalone.js +**The README for the `2.x` version is on the [v2.x](https://github.com/Redocly/redoc/tree/v2.x) branch.** + +All the 2.x and 3.x releases are deployed to npm and can be used with Redocly-cdn: +- particular release, for example: +- `v2.0.0`: https://cdn.redoc.ly/redoc/v2.0.0/bundles/redoc.standalone.js +- `v3.0.0`: https://cdn.redoc.ly/redoc/v3.0.0/bundles/redoc.standalone.js - `latest` release: https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js Additionally, all the 1.x releases are hosted on our GitHub Pages-based CDN **(deprecated)**: diff --git a/api-extractor.json b/api-extractor.json new file mode 100644 index 00000000..fcf20994 --- /dev/null +++ b/api-extractor.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "mainEntryPointFilePath": "/lib/index.d.ts", + "compiler": { + "tsconfigFilePath": "/tsconfig.json" + }, + "apiReport": { + "enabled": false + }, + "docModel": { + "enabled": false + }, + "dtsRollup": { + "enabled": true, + "untrimmedFilePath": "/bundle/redoc.d.ts" + }, + "tsdocMetadata": { + "enabled": false + }, + "messages": { + "compilerMessageReporting": { + "default": { + "logLevel": "warning" + } + }, + "extractorMessageReporting": { + "default": { + "logLevel": "warning" + }, + "ae-missing-release-tag": { + "logLevel": "none" + } + }, + "tsdocMessageReporting": { + "default": { + "logLevel": "none" + } + } + } +} diff --git a/benchmark/benchmark.js b/benchmark/benchmark.js deleted file mode 100644 index 32623a6b..00000000 --- a/benchmark/benchmark.js +++ /dev/null @@ -1,125 +0,0 @@ -const beautifyBenchmark = require('beautify-benchmark'); -const sh = require('shelljs'); -const fs = require('fs'); -const pathJoin = require('path').join; -const spawn = require('child_process').spawn; -const puppeteer = require('puppeteer'); - -const args = process.argv.slice(2); -args[0] = args[0] || 'HEAD'; -args[1] = args[1] || 'local'; - -let started = false; - -console.log('Benchmarking revisions: ' + args.join(', ')); - -const localDistDir = './benchmark/revisions/local/bundles'; -sh.rm('-rf', localDistDir); -console.log(`Building local dist: ${localDistDir}`); -sh.mkdir('-p', localDistDir); -exec(`npm run bundle:lib --output-path ${localDistDir}`); - -const revisions = []; -for (const arg of args) { - revisions.push({ name: arg, path: buildRevisionDist(arg) }); -} - -const configFile = ` - export const revisions = [ ${revisions.map(rev => JSON.stringify(rev)).join(', ')} ]; -`; - -const configDir = './benchmark/revisions/config.js'; -console.log(`Writing config "${configDir}"`); -fs.writeFileSync(configDir, configFile); - -console.log('Starting benchmark server'); -const proc = spawn('npm', ['run', 'start:benchmark']); - -proc.stdout.on('data', data => { - if (data.toString().indexOf('Compiled successfully') > -1) { - console.log('Server started'); - startBenchmark(); - } -}); - -proc.stderr.on('data', data => { - console.error(data.toString()); -}); - -proc.on('close', code => { - console.log(`Benchmark server stopped with code ${code}`); -}); - -async function runPuppeteer() { - return await puppeteer - .launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] }) - .then(async browser => { - const page = await browser.newPage(); - let resolve; - const prom = new Promise(_resolve => { - resolve = _resolve; - }); - page.on('console', async msg => { - const args = msg.args(); - const obj = args.length > 0 && (await args[0].jsonValue()); - if (!obj) return; - - if (obj.done) { - beautifyBenchmark.log(); - // resolve(obj); - } else if (obj.cycle) { - beautifyBenchmark.add(obj.cycle); - } else if (obj.allDone) { - resolve(); - } else { - console.log(obj); - } - }); - await page.goto('http://127.0.0.1:9090', { timeout: 0 }); - const res = await prom; - await browser.close(); - return res; - }); -} - -async function startBenchmark() { - if (started) return; - started = true; - console.log('Starting benchmarks'); - await runPuppeteer(); - - console.log('Killing benchmark server'); - proc.kill('SIGINT'); -} - -function exec(command) { - const { code, stdout, stderr } = sh.exec(command, { silent: true }); - if (code !== 0) { - console.error(stdout); - console.error(stderr); - sh.exit(code); - } - return stdout.trim(); -} - -function buildRevisionDist(revision) { - if (revision === 'local') { - return localDistDir; - } - const hash = exec(`git log -1 --format=%h "${revision}"`); - const buildDir = './benchmark/revisions/' + hash; - const distDir = buildDir + '/bundles'; - if (sh.test('-d', distDir)) { - console.log(`Using prebuilt "${revision}"(${hash}) revision: ${buildDir}`); - return distDir; - } - console.log(`Building "${revision}"(${hash}) revision: ${buildDir}`); - sh.mkdir('-p', buildDir); - exec(`git archive "${hash}" | tar -xC "${buildDir}"`); - - const pwd = sh.pwd(); - sh.cd(buildDir); - exec('npm uninstall cypress puppeteer && npm install && npm run bundle:lib'); - sh.cd(pwd); - return distDir; -} diff --git a/benchmark/index.html b/benchmark/index.html deleted file mode 100644 index 247406a0..00000000 --- a/benchmark/index.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - ReDoc - - - - - - - - - - - - - \ No newline at end of file diff --git a/benchmark/index.tsx b/benchmark/index.tsx deleted file mode 100644 index 139f1ec4..00000000 --- a/benchmark/index.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import * as React from 'react'; -import { render, unmountComponentAtNode } from 'react-dom'; - -import { Redoc, RedocProps } from '../src/components'; - -import { loadAndBundleSpec } from '../src/utils'; - -import { revisions } from './revisions/config'; -import { configure } from 'mobx'; - -declare var Benchmark; - -configure({ - isolateGlobalState: true, -}); - -const node = document.getElementById('example'); - -const renderRoot = (Component: typeof Redoc, props: RedocProps) => - render(, node!); - -async function importRedocs() { - return Promise.all( - revisions.map(rev => { - return import('./' + rev.path.substring(12) + '/redoc.lib.js'); - }), - ); -} - -function startFullTime(redocs, resolvedSpec) { - return new Promise(async resolve => { - const suite = new Benchmark.Suite('Full time', { - maxTime: 20, - initCount: 2, - onStart(event) { - console.log(' ⏱️ ' + event.currentTarget.name); - }, - onCycle(event) { - console.log({ cycle: event.target }); - }, - onComplete() { - console.log({ done: true }); - setTimeout(() => resolve(), 10); - }, - }); - - revisions.forEach((rev, idx) => { - const redoc = redocs[idx]; - suite.add(rev.name, () => { - const store = new redoc.AppStore(resolvedSpec, 'openapi.yaml'); - renderRoot(redoc.Redoc, { store }); - unmountComponentAtNode(node!); - }); - }); - - suite.run({ async: true }); - }); -} - -function startInitStore(redocs, resolvedSpec) { - return new Promise(async resolve => { - const suite = new Benchmark.Suite('Create Store Time', { - maxTime: 20, - initCount: 2, - onStart(event) { - console.log(' ⏱️ ' + event.currentTarget.name); - }, - onCycle(event) { - console.log({ cycle: event.target }); - }, - onComplete() { - console.log({ done: true }); - setTimeout(() => resolve(), 10); - }, - }); - - revisions.forEach((rev, idx) => { - const redoc = redocs[idx]; - suite.add(rev.name, () => { - const store = new redoc.AppStore(resolvedSpec, 'openapi.yaml'); - store.dispose(); - }); - }); - - suite.run({ async: true }); - }); -} - -function startRenderTime(redocs, resolvedSpec) { - return new Promise(async resolve => { - const suite = new Benchmark.Suite('Render time', { - maxTime: 20, - initCount: 2, - onStart(event) { - console.log(' ⏱️ ' + event.currentTarget.name); - }, - onCycle(event) { - console.log({ cycle: event.target }); - unmountComponentAtNode(node!); - }, - onComplete() { - console.log({ done: true }); - setTimeout(() => resolve(), 10); - }, - }); - - revisions.forEach((rev, idx) => { - const redoc = redocs[idx]; - const store = new redoc.AppStore(resolvedSpec, 'openapi.yaml'); - suite.add(rev.name, () => { - renderRoot(redoc.Redoc, { store }); - }); - }); - - suite.run({ async: true }); - }); -} - -async function runBenchmarks() { - const redocs: any[] = await importRedocs(); - const resolvedSpec = await loadAndBundleSpec('openapi.yaml'); - await startInitStore(redocs, resolvedSpec); - await startRenderTime(redocs, resolvedSpec); - await startFullTime(redocs, resolvedSpec); - console.log({ allDone: true }); -} - -runBenchmarks(); diff --git a/config/docker/Dockerfile b/config/docker/Dockerfile index b56daf4d..a2ce59ff 100644 --- a/config/docker/Dockerfile +++ b/config/docker/Dockerfile @@ -5,52 +5,47 @@ # npm i -g http-server # http-server -p 8000 --cors -FROM node:18-alpine +FROM node:22.20.0-alpine@sha256:dbcedd8aeab47fbc0f4dd4bffa55b7c3c729a707875968d467aaaea42d6225af AS build -RUN apk update && apk add --no-cache git - -# Install dependencies WORKDIR /build -COPY package.json package-lock.json /build/ -RUN npm ci --no-optional --ignore-scripts -RUN npm explore esbuild -- npm run postinstall -# copy only required for the build files -COPY src /build/src -COPY webpack.config.ts tsconfig.json custom.d.ts /build/ -COPY config/webpack-utils.ts /build/config/ -COPY typings/styled-patch.d.ts /build/typings/styled-patch.d.ts +COPY . . -RUN npm run bundle:standalone +RUN npm ci --no-optional --ignore-scripts --no-fund --omit=dev \ + && npm install --no-save vite -FROM nginx:alpine +RUN npm run build:standalone && npm run minify + +FROM nginx:1.28-alpine@sha256:8f2bcf97c473dfe311e79a510ee540ee02e28ce1e6a64e1ef89bfad32574ef10 ENV PAGE_TITLE="ReDoc" ENV PAGE_FAVICON="favicon.png" ENV BASE_PATH= -ENV SPEC_URL="http://petstore.swagger.io/v2/swagger.json" +ENV SPEC_URL="https://cdn.redocly.com/redoc/museum-api.yaml" ENV PORT=80 +ENV HOST=localhost ENV REDOC_OPTIONS= -# copy files to the nginx folder -COPY --from=0 build/bundles /usr/share/nginx/html -COPY config/docker/index.tpl.html /usr/share/nginx/html/index.html -COPY demo/favicon.png /usr/share/nginx/html/ -COPY config/docker/nginx.conf /etc/nginx/ -COPY config/docker/docker-run.sh /usr/local/bin +# add docker-entrypoint scripts +COPY config/docker/docker-entrypoint.d/ /docker-entrypoint.d/ +RUN chmod -R +x /docker-entrypoint.d/ + +# copy nginx config +COPY config/docker/nginx/templates/ /etc/nginx/templates/ +COPY config/docker/nginx/nginx.conf config/docker/nginx/handle_options.conf config/docker/nginx/security.conf /etc/nginx/ + +# copy static files +COPY config/docker/static/ /usr/share/nginx/html/ +COPY --from=build /build/bundle/redoc.standalone.js /usr/share/nginx/html/ # Provide rights to the root group to write to nginx repositories (needed to run in OpenShift) -RUN chgrp -R 0 /etc/nginx && \ - chgrp -R 0 /usr/share/nginx/html && \ - chgrp -R 0 /var/cache/nginx && \ - chgrp -R 0 /var/log/nginx && \ - chgrp -R 0 /var/run && \ - chmod -R g+rwX /etc/nginx && \ - chmod -R g+rwX /usr/share/nginx/html && \ - chmod -R g+rwX /var/cache/nginx && \ - chmod -R g+rwX /var/log/nginx && \ - chmod -R g+rwX /var/run - -EXPOSE 80 - -CMD ["sh", "/usr/local/bin/docker-run.sh"] +RUN chgrp -R 0 /etc/nginx \ + && chgrp -R 0 /usr/share/nginx/html \ + && chgrp -R 0 /var/cache/nginx \ + && chgrp -R 0 /var/log/nginx \ + && chgrp -R 0 /var/run \ + && chmod -R g+rwX /etc/nginx \ + && chmod -R g+rwX /usr/share/nginx/html \ + && chmod -R g+rwX /var/cache/nginx \ + && chmod -R g+rwX /var/log/nginx \ + && chmod -R g+rwX /var/run diff --git a/config/docker/README.md b/config/docker/README.md index 8e042f4a..014a91ac 100644 --- a/config/docker/README.md +++ b/config/docker/README.md @@ -1,4 +1,4 @@ -# Official ReDoc Docker Image +# Official Redoc Docker Image ## Usage @@ -45,8 +45,9 @@ Another issue with OpenShift is that the default exposed port `80` cannot be use - `PAGE_TITLE` (default `"ReDoc"`) - page title - `PAGE_FAVICON` (default `"favicon.png"`) - URL to page favicon -- `BASE_PATH` (optional) - prepend favicon & standalone bundle with this path -- `SPEC_URL` (default `"http://petstore.swagger.io/v2/swagger.json"`) - URL to spec +- `BASE_PATH` (optional) - path prefix +- `SPEC_URL` (default `"http://petstore.swagger.io/v2/swagger.json"`) – URL to the spec (if mounted as a file inside the container and `BASE_PATH` is used, the spec should contain the prefix, e.g., for `"/v1/swagger.json"`) +- `HOST` (default `localhost`) - nginx server_name - `PORT` (default `80`) - nginx port - `REDOC_OPTIONS` (optional) - [`` tag attributes](https://github.com/Redocly/redoc#redoc-tag-attributes) diff --git a/config/docker/docker-entrypoint.d/90-envsubst-on-html-templates.sh b/config/docker/docker-entrypoint.d/90-envsubst-on-html-templates.sh new file mode 100644 index 00000000..62096762 --- /dev/null +++ b/config/docker/docker-entrypoint.d/90-envsubst-on-html-templates.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +# Loop through all *.tpl.html files and transform them +for tpl in /usr/share/nginx/html/*.tpl.html; do + target="/usr/share/nginx/html/$(basename "$tpl" .tpl.html).html" + envsubst < "$tpl" > "$target" +done diff --git a/config/docker/docker-entrypoint.d/95-clean-up.sh b/config/docker/docker-entrypoint.d/95-clean-up.sh new file mode 100644 index 00000000..6315291d --- /dev/null +++ b/config/docker/docker-entrypoint.d/95-clean-up.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +# remove template files +rm -f /usr/share/nginx/html/index.prefix.tpl.html /usr/share/nginx/html/index.tpl.html + +if [ -n "$BASE_PATH" ]; then + rm -f /etc/nginx/conf.d/default.conf + rm -f /usr/share/nginx/html/index.html + mv /usr/share/nginx/html/index.prefix.html /usr/share/nginx/html/index.html +else + rm -f /etc/nginx/conf.d/default.prefix.conf + rm -f /usr/share/nginx/html/index.prefix.html +fi diff --git a/config/docker/docker-run.sh b/config/docker/docker-run.sh deleted file mode 100644 index f9c69e0c..00000000 --- a/config/docker/docker-run.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -set -e - -sed -i -e "s|%PAGE_TITLE%|$PAGE_TITLE|g" /usr/share/nginx/html/index.html -sed -i -e "s|%PAGE_FAVICON%|$PAGE_FAVICON|g" /usr/share/nginx/html/index.html -sed -i -e "s|%BASE_PATH%|$BASE_PATH|g" /usr/share/nginx/html/index.html -sed -i -e "s|%SPEC_URL%|$SPEC_URL|g" /usr/share/nginx/html/index.html -sed -i -e "s|%REDOC_OPTIONS%|${REDOC_OPTIONS}|g" /usr/share/nginx/html/index.html -sed -i -e "s|\(listen\s*\) [0-9]*|\1 ${PORT}|g" /etc/nginx/nginx.conf - -exec nginx -g 'daemon off;' diff --git a/config/docker/hooks/build b/config/docker/hooks/build deleted file mode 100755 index 1de054f1..00000000 --- a/config/docker/hooks/build +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -# DockerHub cd into Dockerfile location before build -# So we have to undo this. -cd ../.. -docker build -f config/docker/Dockerfile -t $IMAGE_NAME . diff --git a/config/docker/index.tpl.html b/config/docker/index.tpl.html deleted file mode 100644 index 83258786..00000000 --- a/config/docker/index.tpl.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - %PAGE_TITLE% - - - - - - - - - - diff --git a/config/docker/nginx.conf b/config/docker/nginx.conf deleted file mode 100644 index 9c529346..00000000 --- a/config/docker/nginx.conf +++ /dev/null @@ -1,71 +0,0 @@ -worker_processes 1; - -events { - worker_connections 1024; -} - -http { - include mime.types; - default_type application/octet-stream; - - sendfile on; - - keepalive_timeout 65; - - server { - listen 80; - server_name localhost; - index index.html index.htm; - - location / { - alias /usr/share/nginx/html/; - - if ($request_method = 'OPTIONS') { - # Add security headers - add_header 'X-Frame-Options' 'deny always'; - add_header 'X-XSS-Protection' '"1; mode=block" always'; - add_header 'X-Content-Type-Options' 'nosniff always'; - add_header 'Referrer-Policy' 'strict-origin-when-cross-origin'; - - # Set access control header - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; - # - # Custom headers and headers various browsers *should* be OK with but aren't - # - add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; - # - # Tell client that this pre-flight info is valid for 20 days - # - add_header 'Access-Control-Max-Age' 1728000; - add_header 'Content-Type' 'text/plain charset=UTF-8'; - add_header 'Content-Length' 0; - return 204; - } - if ($request_method = 'POST') { - # Add security headers - add_header 'X-Frame-Options' 'deny always'; - add_header 'X-XSS-Protection' '"1; mode=block" always'; - add_header 'X-Content-Type-Options' 'nosniff always'; - add_header 'Referrer-Policy' 'strict-origin-when-cross-origin'; - - # Set access control header - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; - add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; - } - if ($request_method = 'GET') { - # Add security headers - add_header 'X-Frame-Options' 'deny always'; - add_header 'X-XSS-Protection' '"1; mode=block" always'; - add_header 'X-Content-Type-Options' 'nosniff always'; - add_header 'Referrer-Policy' 'strict-origin-when-cross-origin'; - - # Set access control header - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; - add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; - } - } - } -} diff --git a/config/docker/nginx/handle_options.conf b/config/docker/nginx/handle_options.conf new file mode 100644 index 00000000..dde5921f --- /dev/null +++ b/config/docker/nginx/handle_options.conf @@ -0,0 +1,9 @@ +if ($request_method = 'OPTIONS') { + include /etc/nginx/security.conf; + # Tell client that this pre-flight info is valid for 20 days + # + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; +} \ No newline at end of file diff --git a/config/docker/nginx/nginx.conf b/config/docker/nginx/nginx.conf new file mode 100644 index 00000000..a2eb3991 --- /dev/null +++ b/config/docker/nginx/nginx.conf @@ -0,0 +1,18 @@ +worker_processes 1; + +events { + worker_connections 1024; +} + +http { + include mime.types; + default_type application/octet-stream; + + sendfile on; + + keepalive_timeout 65; + + + include /etc/nginx/security.conf; + include /etc/nginx/conf.d/*.conf; +} diff --git a/config/docker/nginx/security.conf b/config/docker/nginx/security.conf new file mode 100644 index 00000000..7341715b --- /dev/null +++ b/config/docker/nginx/security.conf @@ -0,0 +1,9 @@ + # Add security headers + add_header 'X-Frame-Options' 'deny always' always; + add_header 'X-XSS-Protection' '"1; mode=block" always' always; + add_header 'X-Content-Type-Options' 'nosniff always' always; + add_header 'Referrer-Policy' 'strict-origin-when-cross-origin' always; + # Set access control header + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type' always; \ No newline at end of file diff --git a/config/docker/nginx/templates/default.conf.template b/config/docker/nginx/templates/default.conf.template new file mode 100644 index 00000000..782f864a --- /dev/null +++ b/config/docker/nginx/templates/default.conf.template @@ -0,0 +1,16 @@ +server { + listen ${PORT}; + server_name ${HOST}; + + root /usr/share/nginx/html; + + location / { + include /etc/nginx/handle_options.conf; + try_files /index.html =404; + } + + location ~* ^/(.+\.[^/]+)$ { + include /etc/nginx/handle_options.conf; + try_files /$1 =404; + } +} \ No newline at end of file diff --git a/config/docker/nginx/templates/default.prefix.conf.template b/config/docker/nginx/templates/default.prefix.conf.template new file mode 100644 index 00000000..f8e53834 --- /dev/null +++ b/config/docker/nginx/templates/default.prefix.conf.template @@ -0,0 +1,27 @@ +server { + listen ${PORT}; + server_name ${HOST}; + + root /usr/share/nginx/html; + + location / { + include /etc/nginx/handle_options.conf; + return 404; + } + + location = /${BASE_PATH} { + include /etc/nginx/handle_options.conf; + try_files /index.html =404; + } + + location /${BASE_PATH}/ { + include /etc/nginx/handle_options.conf; + try_files /index.html =404; + } + + location ~* ^/${BASE_PATH}/(.+\.[^/]+)$ { + include /etc/nginx/handle_options.conf; + alias /usr/share/nginx/html/; + try_files /$1 =404; + } +} \ No newline at end of file diff --git a/demo/favicon.png b/config/docker/static/favicon.png similarity index 100% rename from demo/favicon.png rename to config/docker/static/favicon.png diff --git a/config/docker/static/index.prefix.tpl.html b/config/docker/static/index.prefix.tpl.html new file mode 100644 index 00000000..2d015887 --- /dev/null +++ b/config/docker/static/index.prefix.tpl.html @@ -0,0 +1,24 @@ + + + + + + ${PAGE_TITLE} + + + + + + + + + + diff --git a/demo/playground/index.html b/config/docker/static/index.tpl.html similarity index 50% rename from demo/playground/index.html rename to config/docker/static/index.tpl.html index bfc9589b..a032b3f0 100644 --- a/demo/playground/index.html +++ b/config/docker/static/index.tpl.html @@ -1,19 +1,11 @@ - + - Redoc - + ${PAGE_TITLE} + + - + + diff --git a/config/docker/static/styles.css b/config/docker/static/styles.css new file mode 100644 index 00000000..7c716ac2 --- /dev/null +++ b/config/docker/static/styles.css @@ -0,0 +1,8 @@ +body { + margin: 0; + padding: 0; +} + +redoc { + display: block; +} diff --git a/config/webpack-utils.ts b/config/webpack-utils.ts deleted file mode 100644 index 609f55eb..00000000 --- a/config/webpack-utils.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as webpack from 'webpack'; - -export function webpackIgnore(regexp) { - return new webpack.NormalModuleReplacementPlugin(regexp, require.resolve('lodash.noop')); -} diff --git a/custom.d.ts b/custom.d.ts deleted file mode 100644 index b0df57d6..00000000 --- a/custom.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/// - -declare module '*.json' { - const content: any; - export = content; -} - -declare module '*.svg' { - const content: string; - export default content; -} - -declare module '*.css' { - const content: string; - export default content; -} - -declare var __REDOC_VERSION__: string; -declare var __REDOC_REVISION__: string; - -declare var reactHotLoaderGlobal: any; - -interface Element { - scrollIntoViewIfNeeded(centerIfNeeded?: boolean): void; -} - -type GenericObject = Record; diff --git a/cypress.config.ts b/cypress.config.ts deleted file mode 100644 index cd67b971..00000000 --- a/cypress.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from 'cypress'; - -export default defineConfig({ - fixturesFolder: false, - fileServerFolder: '.', - video: true, - projectId: 'z6eb6h', - viewportWidth: 1440, - viewportHeight: 720, - e2e: { - // We've imported your old cypress plugins here. - // You may want to clean this up later by importing these. - setupNodeEvents(on, config) { - return require('./e2e/plugins/index.js')(on, config); - }, - excludeSpecPattern: '*.js.map', - specPattern: 'e2e/integration/**/*.{js,jsx,ts,tsx}', - supportFile: false, - }, -}); diff --git a/demo/ComboBox.tsx b/demo/ComboBox.tsx deleted file mode 100644 index 97d2b25b..00000000 --- a/demo/ComboBox.tsx +++ /dev/null @@ -1,221 +0,0 @@ -/** - * Could not find ready-to-use component with required behaviour so - * I quickly hacked my own. Will refactor into separate npm package later - */ - -import * as React from 'react'; -import styled from '../src/styled-components'; - -const DropDownItem = styled.li<{ $active?: boolean }>` - ${(props: any) => (props.$active ? 'background-color: #eee' : '')}; - padding: 13px 16px; - &:hover { - background-color: #eee; - } - cursor: pointer; - text-overflow: ellipsis; - overflow: hidden; -`; - -const DropDownList = styled.ul` - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), - 0 3px 1px -2px rgba(0, 0, 0, 0.2); - background: #fff; - border-radius: 0 0 2px 2px; - top: 100%; - left: 0; - right: 0; - z-index: 200; - overflow: hidden; - position: absolute; - list-style: none; - margin: 4px 0 0 0; - padding: 5px 0; - font-family: Roboto, sans-serif; - overflow: hidden; -`; - -const ComboBoxWrap = styled.div` - position: relative; - width: 100%; - max-width: 500px; - display: flex; -`; - -const Input = styled.input` - box-sizing: border-box; - width: 100%; - padding: 0 10px; - color: #555; - background-color: #fff; - border: 1px solid #ccc; - - font-size: 16px; - height: 28px; - box-sizing: border-box; - vertical-align: middle; - line-height: 1; - outline: none; - - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - - &:focus { - border-color: #66afe9; - outline: 0; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - } -`; - -const Button = styled.button` - background-color: #fff; - color: #333; - padding: 2px 10px; - touch-action: manipulation; - cursor: pointer; - user-select: none; - border: 1px solid #ccc; - border-left: 0; - font-size: 16px; - height: 28px; - box-sizing: border-box; - vertical-align: middle; - line-height: 1; - outline: none; - width: 80px; - - white-space: nowrap; - - @media screen and (max-width: 450px) { - display: none; - } -`; - -export interface ComboBoxProps { - onChange?: (val: string) => void; - options: Array<{ value: string; label: string }>; - placeholder?: string; - value?: string; -} -export interface ComboBoxState { - open: boolean; - value: string; - activeItemIdx: number; -} - -export default class ComboBox extends React.Component { - state = { - open: false, - value: this.props.value || '', - activeItemIdx: -1, - }; - - open = () => { - this.setState({ - open: true, - }); - }; - - close = () => { - this.setState({ - open: false, - activeItemIdx: -1, - }); - }; - - handleChange = e => { - this.updateValue(e.currentTarget.value); - }; - - updateValue(value) { - this.setState({ - value, - activeItemIdx: -1, - }); - } - - handleSelect(value: string) { - this.updateValue(value); - if (this.props.onChange) { - this.props.onChange(value); - } - this.close(); - } - - handleTryItClick = () => { - this.handleSelect(this.state.value); - }; - - handleKeyPress = (e: React.KeyboardEvent) => { - if (e.keyCode === 13) { - this.handleSelect(e.currentTarget.value); - } else if (e.keyCode === 40) { - const activeItemIdx = Math.min(this.props.options.length - 1, ++this.state.activeItemIdx); - this.setState({ - open: true, - activeItemIdx, - value: this.props.options[activeItemIdx].value, - }); - e.preventDefault(); - } else if (e.keyCode === 38) { - const activeItemIdx = Math.max(0, --this.state.activeItemIdx); - this.setState({ - activeItemIdx, - value: this.props.options[activeItemIdx].value, - }); - e.preventDefault(); - } else if (e.keyCode === 27) { - this.close(); - } - }; - - handleBlur = () => { - setTimeout(() => this.close(), 100); - }; - - handleItemClick = (val, idx) => { - this.handleSelect(val); - this.setState({ - activeItemIdx: idx, - }); - }; - - renderOption = (option: { value: string; label: string }, idx: number) => { - return ( - { - this.handleItemClick(option.value, idx); - }} - > - - {option.label} - -
- {option.value} -
- ); - }; - - render() { - const { open, value } = this.state; - const { options, placeholder } = this.props; - return ( - - - - {open && {options.map(this.renderOption)}} - - ); - } -} diff --git a/demo/big-openapi.json b/demo/big-openapi.json deleted file mode 100644 index 3152d142..00000000 --- a/demo/big-openapi.json +++ /dev/null @@ -1,27363 +0,0 @@ -{ - "openapi": "3.0.0", - "servers": [ - { - "url": "//api.rebilly.com/v2.1", - "description": "Live Server" - }, - { - "url": "//api-sandbox.rebilly.com/v2.1", - "description": "Sandbox Server" - } - ], - "info": { - "version": "2.1", - "title": "Rebilly REST API", - "contact": { - "name": "Rebilly API Support", - "url": "https://www.rebilly.com/contact/", - "email": "integrations@rebilly.com" - }, - "license": { - "name": "Rebilly", - "url": "https://my.rebilly.com/api/license/" - }, - "termsOfService": "https://www.rebilly.com/terms/", - "x-logo": { - "url": "https://rebilly.github.io/RebillyAPI/rb_apiLogo.svg", - "backgroundColor": "#0033A0", - "altText": "Rebilly API logo" - }, - "description": "# Introduction\nThe Rebilly API is built on HTTP. Our API is RESTful. It has predictable\nresource URLs. It returns HTTP response codes to indicate errors. It also\naccepts and returns JSON in the HTTP body. You can use your favorite\nHTTP/REST library for your programming language to use Rebilly's API, or\nyou can use one of our SDKs (currently available in [PHP](https://github.com/Rebilly/rebilly-php)\nand [C#](https://github.com/Rebilly/rebilly-dotnet-client)).\n\n# Authentication\nWhen you sign up for an account, you are given your first API key.\nYou can generate additional API keys, and delete API keys (as you may\nneed to rotate your keys in the future). You authenticate to the\nRebilly API by providing your secret key in the request header.\n\nRebilly offers three forms of authentication: private key, JSON Web Tokens, and\npublic key.\n- private key: authenticates each request by searching for the presence\nof an HTTP header: REB-APIKEY.\n- JWT: authenticates each request by the HTTP header: Authorization.\n- public key: authenticates by the HTTP header: REB-AUTH (read more on this below).\n\nRebilly also offers JSON Web Tokens (JWT) authentication, where you can control\nthe specific granular permissions and expiration for that JWT. We call our resource\nfor generating JWT [Sessions](#tag/Sessions).\n\nRebilly also has a client-side authentication scheme that uses an\napiUser and HMAC-SHA1 signature (only for the Tokens resource), so\nthat you may safely create tokens from the client-side without compromising\nyour secret keys.\n\nNever share your secret keys. Keep them guarded and secure.\nThe client-side authentication scheme uses one HTTP header named REB-AUTH.\n\n\n\n# PHP SDK\nFor all PHP SDK examples provided in this spec you will need to configure `$client`.\nYou may do it like this:\n\n```php\n$client = new Rebilly\\Client([\n 'apiKey' => 'YourApiKeyHere',\n 'baseUrl' => 'https://api.rebilly.com',\n]);\n```\n" - }, - "tags": [ - { - "name": "3D Secure", - "description": "3D Secure is a way to authenticate and protect transactions. Typically,\nit's only possible to protect the initial transaction in a subscription\nwith 3D Secure.\n" - }, - { - "name": "API Keys", - "description": "Always keep your API Keys private. In addition to your API Keys, you may use\nJSON Web Tokens (JWT) to authenticate to the API. See\nour [Sessions](#tag/Sessions) resource for more information.\n" - }, - { - "name": "Bank Accounts", - "description": "Bank Accounts are a type of payment instrument used to collect\nACH (echeck) payments, similar to how a payment\ncard would be used to for a credit card payment.\n" - }, - { - "name": "Blacklists", - "description": "Your blacklists contains values of customerIds, email addresses,\nipAddresses, bank identification numbers, countries or payment cards that\nyou do NOT want to do business with. They are a good tool for managing\nrisk. A blacklist entry that expires after a period of time we call a\ngreylist.\n" - }, - { - "name": "Checkout Pages", - "description": "Hosted checkout pages.\n" - }, - { - "name": "Contacts", - "description": "Contacts are Customer's address book.\nAll contact information used in Invoices, Subscriptions, Transacions, etc is enlisted here. However, changing a Contact won't change corresponding contact information in related resources\n" - }, - { - "name": "Coupons", - "description": "Coupons allows to apply different types of discounts to Invoices, Subscriptions and Plans. Redeemed Coupons will be applied only to Invoices with the same currency.\n" - }, - { - "name": "Customers", - "description": "Customers are your customers, sometimes known as accounts, clients,\nmembers, patrons, or players in other systems.\n" - }, - { - "name": "Customer Authentication", - "description": "Create authentication credentials, login, logout, and verify your customers.\n" - }, - { - "name": "Custom Events", - "description": "If system events can't solve your problems, you are able to create a custom event\nthat can fit your requirements, and use it to solve your own business logic.\n" - }, - { - "name": "Custom Rules", - "description": "\"Don't conform to the rules. Create the rules.\"\nRather than adapt your workflow and business, Rebilly can align with your business\nobjectives by giving you the power to automate certain behaviors when key events happen.\nYou can use this to your advantage to mitigate risk, maximize conversions and minimize costs.\nYou have the controls at your fingertips here. If you need more control,\nor help dialing in on a strategy, feel free to contact us.\n\nWhen an event happens, it triggers the evaluation of conditions (that you set up),\nin order from top to bottom. If the condition is met, the corresponding actions are executed.\nThe conditions continue to be checked until either all of the conditions have been executed,\nor a special \"stop\" action is executed.\n" - }, - { - "name": "Custom Fields", - "description": "Create additional custom fields for particular resources. You may name,\ndescribe, and determine the type of the schema.\n" - }, - { - "name": "Credential Hashes", - "description": "Get and create SMTP and Webhook credential hashes.\n" - }, - { - "name": "Disputes", - "description": "Handle disputes (chargebacks and retrievals).\n" - }, - { - "name": "Email Credentials", - "description": "Send automated emails through our system by connecting to your third party\nSMTP server (or your third party email service provider's SMTP server).\n" - }, - { - "name": "Files", - "description": "A File is an entity that can store a physical file and some metadata. It also provides an easy access to\nits size, mime-type, user-defined tags and description thus allowing easy sorting and searching among stored\nfiles.\nThere are several methods of file uploading available: multipart/form-data encoded form, RAW POST (by sending\nfile contents as POST body), fetching from URL (by providing the file URL via 'url' param)\nAttachment is an entity that is used to link a File to one or multiple objects like Customer, Dispute, Payment,\nTransaction, Subscription, Plan, Product, Invoice, Note. That allows to quickly find and use files related to\nthose specific entities.\n" - }, - { - "name": "Gateway Accounts", - "description": "Gateway accounts connect payment request to third party networks and platforms.\n" - }, - { - "name": "Invoices", - "description": "Invoices leave a record for both you and your customer of the products sold.\n" - }, - { - "name": "Layouts", - "description": "Layouts are used to hold collections of plans. A layout can be used to\npower a pricing page. You can make multiple layouts, and use rules to\ntarget them to different audiences.\n" - }, - { - "name": "Lists", - "description": "Lists contain sets of values and may be referenced within Rules criteria.\n\nYou may grant permissions to edit Lists to different people than those who can edit Rules.\nIt may be useful if your workflow involves frequent updates to value sets used in criteria.\n" - }, - { - "name": "Migrate payment cards", - "description": "Migrate payment cards from one gateway to another.\n" - }, - { - "name": "Notes", - "description": "Leave notes on a customer record to have a handy location to share with\nothers who may interface with the customer. It's great for customer service.\n" - }, - { - "name": "Organizations", - "description": "Organizations include the name and address of the entities related to your\naccount. An account may be multi-national, and support multiple\norganizations. Note: Organizations are share between \"Live\" and \"Sandbox\"\n" - }, - { - "name": "Payments", - "description": "Collect money from your customers with payments. You can schedule a payment\nto occur in the future. You can assign a dunning schedule to a payment to collect\nin the case of a decline.\n\nSome payments may be, what we term, suspended payments. These types of payments\nrequire user interaction. For example, an initial PayPal purchase, a 3D Secure\npurchase, China Union Pay, and more require the customer's interaction to\ncomplete the payment. We call these a \"suspended\" payment flow.\n" - }, - { - "name": "Payment Cards", - "description": "Payment cards are a type of payment instrument used for credit and debit card\nsales. Rebilly securely vaults the full payment card number, and can pass it\nonward securely to any gateway account to transact business.\n" - }, - { - "name": "Payment Tokens", - "description": "Payment tokens are used to reduce the scope of PCI DSS compliance. A payment\ntoken can be made using a different authentication scheme (refer to the public key\nauthentication scheme in the Authentication section), which allows you to\ncreate a payment token directly from the browser, bypassing the need to send\nsensitive cardholder info to your servers. We recommend using this with our\nRebilly.js library, which helps you wire a form into this API resource and create\npayment tokens.\n" - }, - { - "name": "Plans", - "description": "Plans are a template for making a subscription. For example, you may have a plan\nthat has a 30-day free trial followed by a recurring charge of $19.95 per month\nuntil canceled. The combination of the plan and a request to make a subscription\nwill apply those instructions to create the invoices according to the plan's\nschedule.\n" - }, - { - "name": "Products", - "description": "Proposed: Your product includes digital goods, services, and physical goods.\n" - }, - { - "name": "Reports", - "description": "The Rebilly Reporting API is currently experimental. You may see\nthe [Reports API Documentation here](https://rebilly.github.io/RebillyReportsAPI/).\n" - }, - { - "name": "Rules", - "description": "\"Don't conform to the rules. Create the rules.\"\nRather than adapt your workflow and business, Rebilly can align with your business\nobjectives by giving you the power to automate certain behaviors when key events happen.\nYou can use this to your advantage to mitigate risk, maximize conversions and minimize costs.\nYou have the controls at your fingertips here. If you need more control,\nor help dialing in on a strategy, feel free to contact us.\n\nWhen an event happens, it triggers the evaluation of conditions (that you set up),\nin order from top to bottom. If the condition is met, the corresponding actions are executed.\nThe conditions continue to be checked until either all of the conditions have been executed,\nor a special \"stop\" action is executed.\n" - }, - { - "name": "Sessions", - "description": "A session contains a token, which is a JSON Web Token. The token is created\nwith a user's signin credentials.\n\nThis token can be used to authenticate to the API. In addition, the session can be set to\nexpire at a particular time, and has very granular control over permissions.\nUse the token to then authenticate for further requests to the Rebilly API.\n\nThe token should be kept private, but could be stored on the user's browser\nclient to simulate a \"session.\"\n" - }, - { - "name": "Shipping Zones", - "description": "A shipping zone contains regions and countries that you ship to. Each shipping zone has its own shipping rates.\n" - }, - { - "name": "Status", - "description": "Check the status of the Rebilly API (no authentication required).\n" - }, - { - "name": "Subscriptions", - "description": "A subscription applies a plan's template to create invoices for a customer at the\nappropriate scheduled intervals. A subscription may also determine if the payment\nis collected automatically (with autopay set true).\n" - }, - { - "name": "Taxes", - "description": "Proposed: You can map a product to a tax category. The tax category is used by\ntax providers to calculate taxes for invoices.\n" - }, - { - "name": "Tracking", - "description": "Tracking is a layer for accessing all the activity (API requests,\nsubscriptions, webhooks, events, etc.), thus providing easier\ndebugging and issues auditing.\n" - }, - { - "name": "Transactions", - "description": "Get and refund transactions.\n" - }, - { - "name": "Users", - "description": "A User represents a person who can login to Rebilly, and take actions subject to\ntheir granted permissions.\n" - }, - { - "name": "Websites", - "description": "A Website represents the website/brand that customers interact with... You\ncould think of it like a brand. For example, Nestle owns Perrier and Purina\nand PowerBar.\n\nWe recognize that some enterprises have more than one website (or brand). The\nwebsite is related to each invoice and each payment gateway account. This feature\nwould allow you to have gateway accounts that are related to multiple websites, or\nexclusive to particular websites. And gives you more control over your business.\n" - }, - { - "name": "Webhooks", - "description": "Webhooks are designed to notify your systems when certain/all registered events happen in near real-time.\nThey allow you to collect information about those events. Rebilly can send these information via\nPOST to an URL of your choice.\n" - } - ], - "security": [ - { - "ApiKey": [] - } - ], - "paths": { - "/3dsecure": { - "get": { - "tags": [ - "3D Secure" - ], - "summary": "Retrieve a list of ThreeDSecure entries", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ThreeDSecure" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - }, - "post": { - "tags": [ - "3D Secure" - ], - "summary": "Create a ThreeDSecure entry", - "description": "Create a ThreeDSecure entry\n", - "responses": { - "201": { - "description": "ThreeDSecure entry was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThreeDSecure" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThreeDSecure" - } - } - }, - "description": "ThreeDSecure resource", - "required": true - } - } - }, - "/3dsecure/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "3D Secure" - ], - "summary": "Retrieve a ThreeDSecure entry", - "description": "Retrieve a ThreeDSecure entry with specified identifier string\n", - "responses": { - "200": { - "description": "ThreeDSecure entry was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThreeDSecure" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/activation/{token}": { - "parameters": [ - { - "name": "token", - "in": "path", - "description": "The token string", - "required": true, - "schema": { - "type": "string" - } - } - ], - "post": { - "tags": [ - "Users" - ], - "summary": "Sends a token to activate user account", - "description": "Sends a token to activate user account\n", - "security": [ - { - "RebAuth": [] - } - ], - "responses": { - "204": { - "description": "User account was activated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "422": { - "description": "Invalid token was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "try {\n $client->users()->activate('token');\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ] - } - }, - "/api-keys": { - "get": { - "tags": [ - "API Keys" - ], - "summary": "Retrieve a list of api keys", - "description": "Retrieve a list of api keys\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of api keys was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKey" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$apiKeys = $client->apiKeys()->search([\n 'filter' => 'description:Test',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "API Keys" - ], - "summary": "Create an api key", - "description": "Create an api key\n", - "responses": { - "201": { - "description": "Api Key was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiKey" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$apiKeyForm = new Rebilly\\Entities\\ApiKey();\n$apiKeyForm->setDescription('Test');\n$apiKeyForm->setDatetimeFormat($apiKeyForm::DATETIME_FORMAT_MYSQL);\n\ntry {\n $apiKey = $client->apiKeys()->create($apiKeyForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/ApiKey" - } - } - }, - "/api-keys/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "API Keys" - ], - "summary": "Retrieve api key", - "description": "Retrieve api key with specified identifier string\n", - "responses": { - "200": { - "description": "Api key was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiKey" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$apiKeys = $client->apiKeys()->load('apiKeyID');\n" - } - ] - }, - "put": { - "tags": [ - "API Keys" - ], - "summary": "Create or update api key with predefined ID", - "description": "Create or update api key with predefined identifier string\n", - "responses": { - "200": { - "description": "ApiKey was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiKey" - } - } - } - }, - "201": { - "description": "ApiKey was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiKey" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$apiKeyForm = new Rebilly\\Entities\\ApiKey();\n$apiKeyForm->setDescription('TestPut');\n$apiKeyForm->setDatetimeFormat($apiKeyForm::DATETIME_FORMAT_MYSQL);\n\ntry {\n $apiKey = $client->apiKeys()->update('apiKeyID', $apiKeyForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/ApiKey" - } - }, - "delete": { - "tags": [ - "API Keys" - ], - "summary": "Delete api key", - "description": "Delete api key with predefined identifier string\n", - "responses": { - "204": { - "description": "ApiKey was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "$ref": "#/components/responses/Conflict" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->apiKeys()->delete('apiKeyID');\n" - } - ] - } - }, - "/attachments": { - "get": { - "tags": [ - "Files" - ], - "summary": "Retrieve a list of Attachments", - "description": "Retrieve a list of Attachments\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "$ref": "#/components/parameters/collectionFilter" - }, - { - "$ref": "#/components/parameters/collectionQuery" - }, - { - "$ref": "#/components/parameters/collectionExpand" - }, - { - "$ref": "#/components/parameters/collectionFields" - }, - { - "name": "sort", - "in": "query", - "description": "The collection items sort field and order (prefix with \"-\" for descending sort).", - "style": "form", - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "id", - "-id", - "name", - "-name", - "relatedId", - "-relatedId", - "relatedType", - "-relatedType", - "fileId", - "-fileId", - "createdTime", - "-createdTime", - "updatedTime", - "-updatedTime" - ] - } - } - } - ], - "responses": { - "200": { - "description": "A list of Attachments was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Attachment" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$attachments = $client->attachments()->search([\n 'filter' => 'relatedType:customer',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Files" - ], - "summary": "Create an Attachment", - "description": "Create an Attachment\n", - "responses": { - "201": { - "description": "Attachment was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Attachment" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$attachmentForm = new Rebilly\\Entities\\Attachment();\n$attachmentForm->setFileId('fileId');\n$attachmentForm->setRelatedType($attachmentForm::TYPE_CUSTOMER);\n$attachmentForm->setRelatedId('customerId');\n\ntry {\n $attachment = $client->attachments()->create($attachmentForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Attachment" - } - } - }, - "/attachments/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Files" - ], - "summary": "Retrieve an Attachment", - "description": "Retrieve a Attachment with specified identifier string\n", - "responses": { - "200": { - "description": "Attachment was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Attachment" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$attachment = $client->attachments()->load('attachmentId');\n" - } - ] - }, - "put": { - "tags": [ - "Files" - ], - "summary": "Update the Attachment with predefined ID", - "description": "Update the Attachment with predefined ID\n", - "responses": { - "200": { - "description": "Attachment was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Attachment" - } - } - } - }, - "201": { - "description": "Attachment was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Attachment" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$attachmentForm = new Rebilly\\Entities\\Attachment();\n$attachmentForm->setFileId('fileId');\n$attachmentForm->setRelatedType($attachmentForm::TYPE_CUSTOMER);\n$attachmentForm->setRelatedId('customerId');\n\ntry {\n $attachment = $client->attachments()->update('attachmentId', $attachmentForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Attachment" - } - }, - "delete": { - "tags": [ - "Files" - ], - "summary": "Delete an Attachment", - "description": "Delete the Attachment with predefined identifier string\n", - "responses": { - "204": { - "description": "Attachment was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->attachments()->delete('attachmentId');\n" - } - ] - } - }, - "/authentication-options": { - "get": { - "tags": [ - "Customer Authentication" - ], - "summary": "Read current authentication options", - "description": "Read current authentication options\n", - "responses": { - "200": { - "description": "Current authentication options was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticationOptions" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$authenticationOptions = $client->authenticationOptions()->load();\n" - } - ] - }, - "put": { - "tags": [ - "Customer Authentication" - ], - "summary": "Change authentication options", - "description": "Change options\n", - "responses": { - "200": { - "description": "Authentication Options were updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthenticationOptions" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$authenticationOptionsForm = new Rebilly\\Entities\\AuthenticationOptions();\n// Regular expression below matches any password with 6+ length that contains alphabet symbols and/or numbers.\n$authenticationOptionsForm->setPasswordPattern('/^[a-zA-Z0-9]{6,}$/');\n\ntry {\n $authenticationOptions = $client->authenticationOptions()->update($authenticationOptionsForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthenticationOptions" - } - } - }, - "description": "Authentication Options resource", - "required": true - } - } - }, - "/authentication-tokens": { - "get": { - "tags": [ - "Customer Authentication" - ], - "summary": "Retrieve a list of auth tokens", - "description": "Retrieve a list of auth tokens\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of auth tokens was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticationToken" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$authenticationTokens = $client->authenticationTokens()->search([\n 'filter' => 'customerId:testCustomer',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Customer Authentication" - ], - "summary": "Login", - "description": "Login a user (customer)\n", - "responses": { - "201": { - "description": "Login successful", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthenticationToken" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$authenticationForm = new Rebilly\\Entities\\AuthenticationToken();\n$authenticationForm->setUsername('username');\n$authenticationForm->setPassword('test123');\n\ntry {\n $authenticationToken = $client->authenticationTokens()->login($authenticationForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthenticationToken" - } - } - }, - "description": "AuthenticationToken resource", - "required": true - } - } - }, - "/authentication-tokens/{token}": { - "parameters": [ - { - "name": "token", - "in": "path", - "description": "The token identifier string", - "required": true, - "schema": { - "type": "string" - } - } - ], - "get": { - "tags": [ - "Customer Authentication" - ], - "summary": "Verify", - "description": "Verify an authentication token\n", - "responses": { - "200": { - "description": "Authentication Token was verified", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthenticationToken" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$isVerified = $client->authenticationTokens()->verify('token');\n" - } - ] - }, - "delete": { - "tags": [ - "Customer Authentication" - ], - "summary": "Logout a user", - "description": "Logout a user\n", - "responses": { - "204": { - "description": "User was logged out", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->authenticationTokens()->logout('token');\n" - } - ] - } - }, - "/bank-accounts": { - "get": { - "tags": [ - "Bank Accounts" - ], - "summary": "Retrieve a list of bank accounts", - "description": "Retrieve a list of Bank Accounts\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Bank Accounts was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BankAccount" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$bankAccounts = $client->bankAccounts()->search([\n 'filter' => 'customerId:testId',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Bank Accounts" - ], - "summary": "Create a Bank Account", - "description": "Create a Bank Account\n", - "responses": { - "201": { - "description": "Bank Account was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BankAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$bankAccountForm = new Rebilly\\Entities\\BankAccount();\n$bankAccountForm->setCustomerId('customerId');\n$bankAccountForm->setContactId('contactId');\n$bankAccountForm->setRoutingNumber('0123456');\n$bankAccountForm->setAccountNumber('0123456');\n$bankAccountForm->setAccountType('checking');\n\ntry {\n $bankAccount = $client->bankAccounts()->create($bankAccountForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/BankAccount" - } - } - }, - "/bank-accounts/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Bank Accounts" - ], - "summary": "Retrieve a Bank Account", - "description": "Retrieve a Bank Account with specified identifier string\n", - "responses": { - "200": { - "description": "BankAccount was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BankAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$bankAccount = $client->bankAccounts()->load('bankAccountId');\n" - } - ] - }, - "put": { - "tags": [ - "Bank Accounts" - ], - "summary": "Create a BankAccount with predefined ID", - "description": "Create or update a BankAccount with predefined identifier string\n", - "responses": { - "200": { - "description": "BankAccount was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BankAccount" - } - } - } - }, - "201": { - "description": "BankAccount was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BankAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$bankAccountForm = new Rebilly\\Entities\\BankAccount();\n$bankAccountForm->setCustomerId('customerId');\n$bankAccountForm->setContactId('contactId');\n$bankAccountForm->setRoutingNumber('0123456');\n$bankAccountForm->setAccountNumber('0123456');\n$bankAccountForm->setAccountType('checking');\n\ntry {\n $bankAccount = $client->customers()->create($bankAccountForm, 'bankAccountId');\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/BankAccount" - } - } - }, - "/bank-accounts/{id}/deactivation": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Bank Accounts" - ], - "summary": "Deactivate a Bank Account", - "description": "Deactivate a Bank Account\n", - "responses": { - "201": { - "description": "Deactivated successful", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BankAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$bankAccount = $client->bankAccounts()->deactivate('bankAccountId');\n" - } - ] - } - }, - "/blacklists": { - "get": { - "tags": [ - "Blacklists" - ], - "summary": "Retrieve a list of blacklists", - "description": "Retrieve a list of blacklists\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Blacklists was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Blacklist" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$blacklists = $client->blacklists()->search([\n 'filter' => 'value:testValue',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Blacklists" - ], - "summary": "Create a blacklist", - "description": "Create a blacklist\n", - "responses": { - "201": { - "description": "Blacklist was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Blacklist" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$blacklistForm = new Rebilly\\Entities\\Blacklist();\n$blacklistForm->setType($blacklistForm::TYPE_EMAIL);\n$blacklistForm->setValue('test@test.com');\n$blacklistForm->setExpiredTime('2025-01-01 05:00:00');\n\ntry {\n $blacklist = $client->blacklists()->create($blacklistForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Blacklist" - } - } - }, - "/blacklists/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Blacklists" - ], - "summary": "Retrieve a blacklist", - "description": "Retrieve a blacklist with specified identifier string\n", - "responses": { - "200": { - "description": "Blacklist was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Blacklist" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$blacklist = $client->blacklists()->load('blacklistId');\n" - } - ] - }, - "put": { - "tags": [ - "Blacklists" - ], - "summary": "Create a blacklist with predefined ID", - "description": "Create a blacklist with predefined identifier string\n", - "responses": { - "201": { - "description": "Blacklist was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Blacklist" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "409": { - "description": "Blacklist exist and cannot be updated", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$blacklistForm = new Rebilly\\Entities\\Blacklist();\n$blacklistForm->setType($blacklistForm::TYPE_EMAIL);\n$blacklistForm->setValue('test@test.com');\n$blacklistForm->setExpiredTime('2025-01-01 05:00:00');\n\ntry {\n $blacklist = $client->blacklists()->create($blacklistForm, 'blacklistId');\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Blacklist" - } - }, - "delete": { - "tags": [ - "Blacklists" - ], - "summary": "Delete a blacklist", - "description": "Delete a blacklist with predefined identifier string\n", - "responses": { - "204": { - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "description": "Blacklist was deleted" - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->blacklists()->delete('blacklistId');\n" - } - ] - } - }, - "/checkout-pages": { - "get": { - "tags": [ - "Checkout Pages" - ], - "summary": "Retrieve a list of checkout pages", - "description": "Retrieve a list of checkout pages\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of checkout pages was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CheckoutPage" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$checkoutPages = $client->checkoutPages()->search([\n 'filter' => 'name:testCheckoutPage',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Checkout Pages" - ], - "summary": "Create a Checkout Page", - "description": "Create a Checkout Page\n", - "responses": { - "201": { - "description": "Checkout Page was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CheckoutPage" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$checkoutPageForm = new Rebilly\\Entities\\CheckoutPage();\n$checkoutPageForm->setPlanId('planId');\n$checkoutPageForm->setWebsiteId('websiteId');\n$checkoutPageForm->setName('TestCheckoutPage');\n$checkoutPageForm->setUriPath('test-checkout-page');\n\ntry {\n $checkoutPage = $client->checkoutPages()->create($checkoutPageForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/CheckoutPage" - } - } - }, - "/checkout-pages/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Checkout Pages" - ], - "summary": "Retrieve a Checkout Page", - "description": "Retrieve a Checkout Page with specified identifier string\n", - "responses": { - "200": { - "description": "Checkout Page was retrieved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CheckoutPage" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$checkoutPage = $client->checkoutPages()->load('checkoutPageId');\n" - } - ] - }, - "put": { - "tags": [ - "Checkout Pages" - ], - "summary": "Create or update a Checkout Page with predefined ID", - "description": "Create or update a Checkout Page with predefined identifier string\n", - "responses": { - "200": { - "description": "Checkout Page was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CheckoutPage" - } - } - } - }, - "201": { - "description": "Checkout Page was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CheckoutPage" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$checkoutPageForm = new Rebilly\\Entities\\CheckoutPage();\n$checkoutPageForm->setPlanId('planId');\n$checkoutPageForm->setWebsiteId('websiteId');\n$checkoutPageForm->setName('TestCheckoutPage');\n$checkoutPageForm->setUriPath('test-checkout-page');\n\ntry {\n $checkoutPage = $client->checkoutPages()->update('checkoutPageId', $checkoutPageForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/CheckoutPage" - } - }, - "delete": { - "tags": [ - "Checkout Pages" - ], - "summary": "Delete a Checkout Page", - "description": "Delete a Checkout Page with predefined identifier string\n", - "responses": { - "204": { - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "description": "Checkout Page was deleted" - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Checkout page cannot be deleted" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->checkoutPages()->delete('checkoutPageId');\n" - } - ] - } - }, - "/contacts": { - "get": { - "tags": [ - "Contacts" - ], - "summary": "Retrieve a list of contacts", - "description": "Retrieve a list of contacts\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Contacts was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Contact" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$contacts = $client->contacts()->search([\n 'filter' => 'firstName:John',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Contacts" - ], - "summary": "Create a contact", - "description": "Create a contact\n", - "responses": { - "201": { - "description": "Contact was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Contact" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$contactForm = new Rebilly\\Entities\\Contact();\n$contactForm->setFirstName('Sherlock');\n$contactForm->setLastName('Holmes');\n$contactForm->setOrganization('TestOrganization');\n\ntry {\n $contact = $client->contacts()->create($contactForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Contact" - } - } - }, - "/contacts/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Contacts" - ], - "summary": "Retrieve a contact", - "description": "Retrieve a contact with specified identifier string\n", - "responses": { - "200": { - "description": "Contact was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Contact" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$contact = $client->contacts()->load('contactId');\n" - } - ] - }, - "put": { - "tags": [ - "Contacts" - ], - "summary": "Create or update a contact with predefined ID", - "description": "Create or update a contact with predefined identifier string\n", - "responses": { - "201": { - "description": "Contact was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Contact" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Contact exists and cannot be updated" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$contactForm = new Rebilly\\Entities\\Contact();\n$contactForm->setFirstName('Sherlock');\n$contactForm->setLastName('Holmes');\n$contactForm->setOrganization('TestOrganization');\n\ntry {\n $contact = $client->contacts()->update('contactId', $contactForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Contact" - } - }, - "delete": { - "tags": [ - "Contacts" - ], - "summary": "Delete a contact", - "description": "Delete a contact with predefined identifier string\n", - "responses": { - "204": { - "description": "Contact was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "402": { - "description": "Contact cannot be deleted" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/coupons-redemptions": { - "get": { - "tags": [ - "Coupons" - ], - "summary": "Retrieve a list of coupon redemptions", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "$ref": "#/components/parameters/collectionFilter" - }, - { - "$ref": "#/components/parameters/collectionQuery" - }, - { - "$ref": "#/components/parameters/collectionCriteria" - }, - { - "$ref": "#/components/parameters/collectionSort" - } - ], - "responses": { - "200": { - "description": "Coupons redemptions were retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CouponRedemption" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$couponRedemptions = $client->couponsRedemptions()->search([\n 'filter' => 'customerId:testCustomer',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Coupons" - ], - "summary": "Redeem a coupon", - "description": "Redeem a coupon\n", - "responses": { - "201": { - "description": "Coupon was redeemed", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CouponRedemption" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$redemptionForm = new Rebilly\\Entities\\Coupons\\Redemption();\n$redemptionForm->setCustomerId('customerId');\n$redemptionForm->setRedemptionCode('redemptionCode');\n\n$restrictionArray = [\n 'type' => Rebilly\\Entities\\Coupons\\Restriction::TYPE_DISCOUNTS_PER_REDEMPTION,\n 'quantity' => 2,\n];\n\n$restrictionForm = new Rebilly\\Entities\\Coupons\\Restriction([\n $restrictionArray,\n]);\n\n$redemptionForm->setAdditionalRestrictions($restrictionForm);\n\ntry {\n $couponRedemption = $client->couponsRedemptions()->redeem($redemptionForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CouponRedemption" - } - } - }, - "description": "Redeem a coupon", - "required": true - } - } - }, - "/coupons-redemptions/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Coupons" - ], - "summary": "Retrieve a coupon redemption with specified identifier string", - "responses": { - "200": { - "description": "Retrieve a coupon redemption with specified identifier string", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CouponRedemption" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$couponRedemption = $client->couponsRedemptions()->load('redemptionCode');\n" - } - ] - } - }, - "/coupons-redemptions/{id}/cancel": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Coupons" - ], - "summary": "Cancel a coupon redemption", - "responses": { - "201": { - "description": "Cancel a coupon redemption" - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->couponsRedemptions()->cancel('id');\n" - } - ] - } - }, - "/coupons": { - "get": { - "tags": [ - "Coupons" - ], - "summary": "Retrieve a list of coupons", - "description": "Retrieve a list of coupons\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "$ref": "#/components/parameters/collectionFilter" - }, - { - "$ref": "#/components/parameters/collectionQuery" - }, - { - "$ref": "#/components/parameters/collectionCriteria" - }, - { - "$ref": "#/components/parameters/collectionSort" - } - ], - "responses": { - "200": { - "description": "A list of coupons was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Coupon" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$coupons = $client->coupons()->search([\n 'filter' => 'status:issued',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Coupons" - ], - "summary": "Create a coupon", - "description": "Create a coupon\n", - "responses": { - "201": { - "description": "Coupon was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Coupon" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$couponForm = new Rebilly\\Entities\\Coupons\\Coupon();\n\n$discountArray = [\n 'currency' => 'USD',\n 'amount' => 1.99,\n];\n\n$discountForm = new \\Rebilly\\Entities\\Coupons\\Discounts\\Fixed($discountArray);\n$couponForm->setDiscount($discountForm);\n// Coupon can be used right now\n$couponForm->setIssuedTime(date('Y-m-d H:i:s'));\n\n$restrictionArray = [\n 'quantity' => 2,\n];\n\n$restrictionForm = new Rebilly\\Entities\\Coupons\\Restrictions\\DiscountsPerRedemption($restrictionArray);\n\n$couponForm->setRestrictions([$restrictionForm]);\n\ntry {\n $coupon = $client->coupons()->create($couponForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Coupon" - } - } - }, - "/coupons/{redemptionCode}": { - "parameters": [ - { - "name": "redemptionCode", - "in": "path", - "description": "The Coupon's redemption code", - "required": true, - "schema": { - "type": "string" - } - } - ], - "get": { - "tags": [ - "Coupons" - ], - "summary": "Retrieve a coupon", - "description": "Retrieve a coupon with specified redemption code string\n", - "responses": { - "200": { - "description": "Coupon was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Coupon" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$coupon = $client->coupons()->load('redemptionCode');\n" - } - ] - }, - "put": { - "tags": [ - "Coupons" - ], - "summary": "Create or update a coupon with predefined redemption code", - "description": "Create or update a coupon with predefined redemption code\n", - "responses": { - "200": { - "description": "Coupon was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Coupon" - } - } - } - }, - "201": { - "description": "Coupon was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Coupon" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Coupon was redeemed already and cannot be changed" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$couponForm = new Rebilly\\Entities\\Coupons\\Coupon();\n\n$discountArray = [\n 'type' => Rebilly\\Entities\\Coupons\\Discount::TYPE_FIXED,\n 'currency' => 'USD',\n 'amount' => 1.99,\n];\n\n$discountForm = new Rebilly\\Entities\\Coupons\\Discount($discountArray);\n$couponForm->setDiscount($discountForm);\n\n$restrictionArray = [\n 'type' => Rebilly\\Entities\\Coupons\\Restriction::TYPE_DISCOUNTS_PER_REDEMPTION,\n 'quantity' => 2,\n];\n\n$restrictionForm = new Rebilly\\Entities\\Coupons\\Restriction([\n $restrictionArray,\n]);\n\n$couponForm->setRestrictions($restrictionForm);\n\ntry {\n $coupon = $client->coupons()->create($couponForm, 'redemptionCode');\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Coupon" - } - } - }, - "/coupons/{redemptionCode}/expiration": { - "parameters": [ - { - "name": "redemptionCode", - "in": "path", - "description": "The Coupon's redemption code", - "required": true, - "schema": { - "type": "string" - } - } - ], - "post": { - "tags": [ - "Coupons" - ], - "summary": "Set a coupon's expiration time.", - "description": "Set a coupon's expiry time with the specified redemption code.\nThe expiredTime of a coupon must be greater than its issuedTime.\nThis cannot be performed on expired coupons.\n", - "responses": { - "201": { - "description": "Coupon expiration was successfully set", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Coupon" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "$ref": "#/components/responses/Conflict" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CouponExpiration" - } - } - }, - "description": "Coupon resource" - } - } - }, - "/credential-hashes/emails": { - "post": { - "tags": [ - "Credential Hashes" - ], - "summary": "Create an email credential", - "description": "Create an email credential\n", - "responses": { - "201": { - "description": "Email credential was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SmtpCredential" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SmtpCredential" - } - } - }, - "description": "Email credential resource", - "required": true - } - } - }, - "/credential-hashes/emails/{hash}": { - "parameters": [ - { - "$ref": "#/components/parameters/hash" - } - ], - "get": { - "tags": [ - "Credential Hashes" - ], - "summary": "Retrieve an email credential", - "description": "Retrieve an email credential with specified token identifier string\n", - "responses": { - "200": { - "description": "Email credential was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SmtpCredential" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/credential-hashes/webhooks": { - "post": { - "tags": [ - "Credential Hashes" - ], - "summary": "Create a webhook credential", - "description": "Create a webhook credential\n", - "responses": { - "201": { - "description": "Webhook credential was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookCredential" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookCredential" - } - } - }, - "description": "Credential resource", - "required": true - } - } - }, - "/credential-hashes/webhooks/{hash}": { - "parameters": [ - { - "$ref": "#/components/parameters/hash" - } - ], - "get": { - "tags": [ - "Credential Hashes" - ], - "summary": "Retrieve a webhook credential", - "description": "Retrieve a webhook credential with specified token identifier string\n", - "responses": { - "200": { - "description": "Webhook credential was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookCredential" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/credentials": { - "get": { - "tags": [ - "Customer Authentication" - ], - "summary": "Retrieve a list of credentials", - "description": "Retrieve a list of credentials\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Credentials was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Credential" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customerCredentials = $client->customerCredentials()->search([\n 'filter' => 'customerId:testCustomer',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Customer Authentication" - ], - "summary": "Create a credential", - "description": "Create a credential\n", - "responses": { - "201": { - "description": "Credential was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Credential" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customerCredentialForm = new Rebilly\\Entities\\CustomerCredential();\n$customerCredentialForm->setCustomerId('customerId');\n$customerCredentialForm->setUsername('test');\n$customerCredentialForm->setPassword('1234');\n\ntry {\n $customerCredential = $client->customerCredentials()->create($customerCredentialForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Credential" - } - } - }, - "/credentials/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Customer Authentication" - ], - "summary": "Retrieve a credential", - "description": "Retrieve a credential with specified identifier string\n", - "responses": { - "200": { - "description": "Credential was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Credential" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customerCredential = $client->customerCredentials()->load('credentialId');\n" - } - ] - }, - "put": { - "tags": [ - "Customer Authentication" - ], - "summary": "Create or update a credential with predefined ID", - "description": "Create or update a credential with predefined identifier string\n", - "responses": { - "200": { - "description": "Credential was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Credential" - } - } - } - }, - "201": { - "description": "Credential was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Credential" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customerCredentialForm = new Rebilly\\Entities\\CustomerCredential();\n$customerCredentialForm->setCustomerId('customerId');\n$customerCredentialForm->setUsername('test');\n$customerCredentialForm->setPassword('1234');\n\ntry {\n $customerCredential = $client->customerCredentials()->update('credentialId', $customerCredentialForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Credential" - } - }, - "delete": { - "tags": [ - "Customer Authentication" - ], - "summary": "Delete a credential", - "description": "Delete a credential with predefined identifier string\n", - "responses": { - "204": { - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "description": "Credential was deleted" - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->customerCredentials()->delete('credentialId');\n" - } - ] - } - }, - "/custom-events": { - "get": { - "tags": [ - "Custom Events" - ], - "summary": "Retrieve a list of custom events", - "description": "Retrieve a list of custom events\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "name": "sort", - "in": "query", - "description": "The collection items sort field and order (prefix with \"-\" for descending sort).", - "style": "form", - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "createdTime", - "-createdTime", - "handledTime", - "-handledTime", - "scheduledTime", - "-scheduledTime" - ] - } - } - } - ], - "responses": { - "200": { - "description": "A list of custom events was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomEvent" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - }, - "post": { - "tags": [ - "Custom Events" - ], - "summary": "Create a custom event", - "description": "Create a custom event\n", - "responses": { - "202": { - "description": "Custom event was accepted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomEvent" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/CustomEvent" - } - } - }, - "/custom-events/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Custom Events" - ], - "summary": "Retrieve a custom event", - "description": "Retrieve a custom event with predefined identifier string\n", - "responses": { - "200": { - "description": "Custom event was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomEvent" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "put": { - "tags": [ - "Custom Events" - ], - "summary": "Create a custom event with predefined ID", - "description": "Create a custom event with predefined identifier string\n", - "responses": { - "202": { - "description": "Custom event was accepted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomEvent" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "409": { - "$ref": "#/components/responses/Conflict" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/CustomEvent" - } - }, - "delete": { - "tags": [ - "Custom Events" - ], - "summary": "Delete a custom event", - "description": "Delete a custom event with predefined identifier string\n", - "responses": { - "204": { - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "description": "Custom event was deleted" - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "$ref": "#/components/responses/Conflict" - } - } - } - }, - "/custom-events/{id}/rules": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Custom Events", - "Rules" - ], - "summary": "Retrieve a list of rules for custom event", - "responses": { - "200": { - "description": "Rules were retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleSet" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "put": { - "tags": [ - "Custom Events", - "Rules" - ], - "summary": "Update the rules for custom event", - "responses": { - "200": { - "description": "Rules were updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleSet" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/RuleSet" - } - } - }, - "/custom-events/{id}/rules/history": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Custom Events", - "Rules" - ], - "summary": "Retrieve the change history of the set of rules for a custom event", - "description": "Retrieve the change history of the set of rules for the selected custom event.\nThe history is updated each time you change the rules.\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "$ref": "#/components/parameters/collectionFilter" - }, - { - "$ref": "#/components/parameters/collectionQuery" - }, - { - "$ref": "#/components/parameters/collectionSort" - }, - { - "$ref": "#/components/parameters/collectionFields" - }, - { - "$ref": "#/components/parameters/collectionExpand" - } - ], - "responses": { - "200": { - "description": "History was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RuleSetHistoryItem" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/custom-events/{id}/rules/history/{version}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - }, - { - "$ref": "#/components/parameters/rulesVersion" - } - ], - "get": { - "tags": [ - "Custom Events", - "Rules" - ], - "summary": "Retrieve the record from the change history of the set of rules for a custom event", - "description": "Retrieve the record from the change history of the set of rules for the selected custom event.\nA history record is created each time you change the rules.\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionFields" - }, - { - "$ref": "#/components/parameters/collectionExpand" - } - ], - "responses": { - "200": { - "description": "Rules version was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleSetHistoryItem" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/custom-events/{id}/rules/versions/{version}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - }, - { - "$ref": "#/components/parameters/rulesVersion" - } - ], - "get": { - "tags": [ - "Custom Events", - "Rules" - ], - "summary": "Retrieve the version of the set of rules for a custom event", - "description": "Retrieve the version of the selected set of rules for the selected custom event.\nThe versions are created each time you change the rules.\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionFields" - }, - { - "$ref": "#/components/parameters/collectionExpand" - } - ], - "responses": { - "200": { - "description": "Rules version was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleSetVersion" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/custom-fields/{resource}": { - "parameters": [ - { - "name": "resource", - "in": "path", - "description": "The resource type string", - "required": true, - "schema": { - "type": "string", - "enum": [ - "customers", - "payment-cards", - "subscriptions", - "transactions", - "websites", - "contacts", - "products" - ] - } - } - ], - "get": { - "tags": [ - "Custom Fields" - ], - "summary": "Retrieve Custom Fields", - "description": "Retrieve a schema of Custom Fields for the given resource type\n", - "responses": { - "200": { - "description": "A schema of Custom Fields was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "description": "The list of custom fields", - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomField" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customFields = $client->customFields()->search([\n 'filter' => 'type:boolean',\n]);\n" - } - ] - } - }, - "/custom-fields/{resource}/{name}": { - "parameters": [ - { - "name": "resource", - "in": "path", - "description": "The resource type string", - "required": true, - "schema": { - "type": "string", - "enum": [ - "customers", - "payment-cards", - "subscriptions", - "transactions", - "websites", - "contacts", - "products" - ] - } - }, - { - "name": "name", - "in": "path", - "description": "The custom field's identifier string", - "required": true, - "schema": { - "type": "string" - } - } - ], - "get": { - "tags": [ - "Custom Fields" - ], - "summary": "Retrieve a Custom Field", - "description": "Retrieve a schema of the given Custom Field for the given resource type\n", - "responses": { - "200": { - "description": "A schema of the Custom Field was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomField" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customField = $client->customFields()->load('customers', 'customerId');\n" - } - ] - }, - "put": { - "tags": [ - "Custom Fields" - ], - "summary": "Create or alter a Custom Field", - "description": "Create or alter a schema of the given Custom Field for the given resource type.\n", - "responses": { - "200": { - "description": "The Custom Field was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomField" - } - } - } - }, - "201": { - "description": "The Custom Fields was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomField" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "409": { - "description": "The schema is in use: remove all the associated data in order to remove or alter the schema", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customFieldForm = new Rebilly\\Entities\\CustomField();\n$customFieldForm->setType($customFieldForm::TYPE_BOOLEAN);\n\ntry {\n $customField = $client->customFields()->update('customers', 'testFieldName', $customFieldForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomField" - } - } - }, - "description": "Custom Fields schema of the given resource type", - "required": true - } - }, - "delete": { - "tags": [ - "Custom Fields" - ], - "summary": "Delete a custom field", - "description": "Delete a custom field by its name\n", - "responses": { - "204": { - "description": "Custom field has been deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "The field is in use: remove all the associated data first", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->customFields()->delete('customers', 'testFieldName');\n" - } - ] - } - }, - "/customers": { - "get": { - "tags": [ - "Customers" - ], - "summary": "Retrieve a list of customers", - "description": "Retrieve a list of customers\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "$ref": "#/components/parameters/collectionFilter" - }, - { - "$ref": "#/components/parameters/collectionQuery" - }, - { - "$ref": "#/components/parameters/collectionExpand" - }, - { - "$ref": "#/components/parameters/collectionFields" - }, - { - "name": "sort", - "in": "query", - "description": "The collection items sort field and order (prefix with \"-\" for descending sort).", - "style": "form", - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "id", - "-id", - "email", - "-email", - "createdTime", - "-createdTime", - "updatedTime", - "-updatedTime" - ] - } - } - }, - { - "name": "Accept", - "in": "header", - "description": "The response media type", - "schema": { - "type": "string", - "enum": [ - "application/json", - "text/csv" - ], - "default": "application/json" - } - } - ], - "responses": { - "200": { - "description": "A list of Customers was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Customer" - } - } - }, - "text/csv": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Customer" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customers = $client->customers()->search([\n 'filter' => 'firstName:John',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Customers" - ], - "summary": "Create a customer", - "description": "Create a customer\n", - "responses": { - "201": { - "description": "Customer was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Customer" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customerForm = new Rebilly\\Entities\\Customer();\n$customerForm->setFirstName('Sherlock');\n$customerForm->setLastName('Holmes');\n$customerForm->setEmail('sherlock.holmes@gmail.com');\n\ntry {\n $customer = $client->customers()->create($customerForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Customer" - } - } - }, - "/customers/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Customers" - ], - "summary": "Retrieve a customer", - "description": "Retrieve a customer with specified identifier string\n", - "responses": { - "200": { - "description": "Customer was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Customer" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customers = $client->customers()->load('myCustomerId');\n" - } - ] - }, - "put": { - "tags": [ - "Customers" - ], - "summary": "Create a customer with predefined ID", - "description": "Create a customer with predefined identifier string\n", - "responses": { - "200": { - "description": "Customer was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Customer" - } - } - } - }, - "201": { - "description": "Customer was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Customer" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customerForm = new Rebilly\\Entities\\Customer();\n$customerForm->setFirstName('Sherlock');\n$customerForm->setLastName('Holmes');\n$customerForm->setEmail('sherlock.holmes@gmail.com');\n\ntry {\n $customer = $client->customers()->update('myCustomerId', $customerForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Customer" - } - } - }, - "/customers/{id}/lead-source": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Customers" - ], - "summary": "Retrieve a customer's Lead Source", - "description": "Retrieve a Lead Source of given customer\n", - "responses": { - "200": { - "description": "Lead Source was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customer = $client->customers()->load('myCustomerId');\n$leadSource = $customer->getLeadSource();\n" - } - ] - }, - "put": { - "tags": [ - "Customers" - ], - "summary": "Create a Lead Source for a customer", - "description": "Create a Lead Source for a customer\n", - "responses": { - "200": { - "description": "Lead Source was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "201": { - "description": "Lead Source was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$leadSourceForm = new Rebilly\\Entities\\LeadSource();\n$leadSourceForm->setSource('TestSource');\n$leadSourceForm->setCampaign('TestCampaign');\n\ntry {\n $customer = $client->customers()->updateLeadSource('myCustomerId', $leadSourceForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/LeadSource" - } - }, - "delete": { - "tags": [ - "Customers" - ], - "summary": "Delete a Lead Source for a customer", - "description": "Delete a Lead Source that belongs to a certain customer\n", - "responses": { - "204": { - "description": "Lead Source was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Lead Source cannot be deleted" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$customer = $client->customers()->deleteLeadSource('myCustomerId');\n" - } - ] - } - }, - "/disputes": { - "get": { - "tags": [ - "Disputes" - ], - "summary": "Retrieve a list of disputes", - "description": "Retrieve a list of disputes\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of disputes was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Dispute" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$disputes = $client->disputes()->search([\n 'filter' => 'transactionId:testId',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Disputes" - ], - "summary": "Create a dispute", - "description": "Create a dispute\n", - "responses": { - "201": { - "description": "Dispute was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dispute" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$disputeForm = new Rebilly\\Entities\\Dispute();\n$disputeForm->setTransactionId('transactionId');\n$disputeForm->setCurrency('USD');\n$disputeForm->setAmount(10);\n$disputeForm->setReasonCode(1000);\n$disputeForm->setType($disputeForm::TYPE_1CB);\n$disputeForm->setStatus($disputeForm::STATUS_RESPONSE_NEEDED);\n$disputeForm->setPostedTime('2025-01-01 05:00:00');\n\ntry {\n $dispute = $client->disputes()->create($disputeForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Dispute" - } - } - }, - "/disputes/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Disputes" - ], - "summary": "Retrieve a dispute", - "description": "Retrieve a dispute with specified identifier string\n", - "responses": { - "200": { - "description": "Dispute was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dispute" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$dispute = $client->disputes()->load('disputeId');\n" - } - ] - }, - "put": { - "tags": [ - "Disputes" - ], - "summary": "Create or update a Dispute with predefined ID", - "description": "Create or update a Dispute with predefined identifier string\n", - "responses": { - "200": { - "description": "Dispute was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dispute" - } - } - } - }, - "201": { - "description": "Dispute was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dispute" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$disputeForm = new Rebilly\\Entities\\Dispute();\n$disputeForm->setTransactionId('transactionId');\n$disputeForm->setCurrency('USD');\n$disputeForm->setAmount(10);\n$disputeForm->setReasonCode(1000);\n$disputeForm->setType($disputeForm::TYPE_1CB);\n$disputeForm->setStatus($disputeForm::STATUS_RESPONSE_NEEDED);\n$disputeForm->setPostedTime('2025-01-01 05:00:00');\n\ntry {\n $dispute = $client->disputes()->update('disputeId', $dispute);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Dispute" - } - } - }, - "/events": { - "get": { - "tags": [ - "Events", - "Rules" - ], - "summary": "Retrieve a list of existing events", - "responses": { - "200": { - "description": "A list of System Events was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SystemEvent" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - } - }, - "/events/{eventType}": { - "parameters": [ - { - "$ref": "#/components/parameters/systemEventType" - } - ], - "get": { - "tags": [ - "Events", - "Rules" - ], - "summary": "Retrieve the event information", - "responses": { - "200": { - "description": "Rules were retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SystemEvent" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/events/{eventType}/rules": { - "parameters": [ - { - "$ref": "#/components/parameters/systemEventType" - } - ], - "get": { - "tags": [ - "Events", - "Rules" - ], - "summary": "Retrieve a list of rules for event", - "responses": { - "200": { - "description": "Rules were retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleSet" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "put": { - "tags": [ - "Events", - "Rules" - ], - "summary": "Update the rules for event", - "responses": { - "200": { - "description": "Rules were updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleSet" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/RuleSet" - } - } - }, - "/events/{eventType}/rules/history": { - "parameters": [ - { - "$ref": "#/components/parameters/systemEventType" - } - ], - "get": { - "tags": [ - "Events", - "Rules" - ], - "summary": "Retrieve the change history of the set of rules", - "description": "Retrieve the change history of the selected set of rules.\nThe history is updated each time you change the rules.\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "$ref": "#/components/parameters/collectionFilter" - }, - { - "$ref": "#/components/parameters/collectionQuery" - }, - { - "$ref": "#/components/parameters/collectionSort" - }, - { - "$ref": "#/components/parameters/collectionFields" - }, - { - "$ref": "#/components/parameters/collectionExpand" - } - ], - "responses": { - "200": { - "description": "History was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RuleSetHistoryItem" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/events/{eventType}/rules/history/{version}": { - "parameters": [ - { - "$ref": "#/components/parameters/systemEventType" - }, - { - "$ref": "#/components/parameters/rulesVersion" - } - ], - "get": { - "tags": [ - "Events", - "Rules" - ], - "summary": "Retrieve the record from the change history of the set of rules", - "description": "Retrieve the record from the change history of the selected set of rules.\nA history record is created each time you change the rules.\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionFields" - }, - { - "$ref": "#/components/parameters/collectionExpand" - } - ], - "responses": { - "200": { - "description": "History record was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleSetHistoryItem" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/events/{eventType}/rules/versions/{version}": { - "parameters": [ - { - "$ref": "#/components/parameters/systemEventType" - }, - { - "$ref": "#/components/parameters/rulesVersion" - } - ], - "get": { - "tags": [ - "Events", - "Rules" - ], - "summary": "Retrieve the version of the set of rules", - "description": "Retrieve the version of the selected set of rules.\nThe versions are created each time you change the rules.\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionFields" - }, - { - "$ref": "#/components/parameters/collectionExpand" - } - ], - "responses": { - "200": { - "description": "Rules version was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleSetVersion" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/files": { - "get": { - "tags": [ - "Files" - ], - "summary": "Retrieve a list of files", - "description": "Retrieve a list of files\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "$ref": "#/components/parameters/collectionFilter" - }, - { - "$ref": "#/components/parameters/collectionQuery" - }, - { - "$ref": "#/components/parameters/collectionExpand" - }, - { - "$ref": "#/components/parameters/collectionFields" - }, - { - "name": "sort", - "in": "query", - "description": "The collection items sort field and order (prefix with \"-\" for descending sort).", - "style": "form", - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "id", - "-id", - "name", - "-name", - "extension", - "-extension", - "size", - "-size", - "width", - "-width", - "height", - "-height", - "createdTime", - "-createdTime", - "updatedTime", - "-updatedTime" - ] - } - } - } - ], - "responses": { - "200": { - "description": "A list of Files was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/File" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$files = $client->files()->search([\n 'filter' => 'name:TestFile',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Files" - ], - "summary": "Create a file", - "description": "Create a file\n", - "responses": { - "201": { - "description": "File was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/File" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$fileForm = new Rebilly\\Entities\\File();\n$fileForm->setUrl('http://test.com/somefile.jpg');\n\ntry {\n $file = $client->files()->create($fileForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "url": { - "description": "The file URL", - "type": "string" - } - } - } - } - }, - "description": "Additionally, a file can be sent with a multipart/form-data POST request or the file's raw body can be sent as a request body", - "required": true - } - } - }, - "/files/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Files" - ], - "summary": "Retrieve a File", - "description": "Retrieve a File with specified identifier string\n", - "responses": { - "200": { - "description": "File was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/File" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$file = $client->files()->load('fileId');\n" - } - ] - }, - "put": { - "tags": [ - "Files" - ], - "summary": "Update the File with predefined ID. Note that file can be uploaded with POST only.", - "description": "Update the File with predefined ID\n", - "responses": { - "200": { - "description": "File was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/File" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$fileForm = new Rebilly\\Entities\\File();\n$fileForm->setDescription('This is a test file');\n\ntry {\n $file = $client->files()->update('fileId', $fileForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/File" - } - } - }, - "description": "File resource", - "required": true - } - }, - "delete": { - "tags": [ - "Files" - ], - "summary": "Delete a File", - "description": "Delete the File with predefined identifier string\n", - "responses": { - "204": { - "description": "File was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->files()->delete('fileId');\n" - } - ] - } - }, - "/files/{id}/download": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Files" - ], - "summary": "Retrieve a file", - "description": "Retrieve a file\n", - "responses": { - "200": { - "description": "The file was retrieved successfully", - "headers": { - "Content-Length": { - "description": "The number of bytes in the file", - "schema": { - "type": "integer" - } - }, - "Content-Type": { - "description": "The MIME type of the file", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "string", - "readOnly": true - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/files/{id}/download{extension}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - }, - { - "name": "extension", - "in": "path", - "description": "File extension which also indicates the desired file format", - "required": true, - "schema": { - "type": "string", - "enum": [ - ".png", - ".jpg" - ] - } - } - ], - "get": { - "tags": [ - "Files" - ], - "summary": "Used for converting images server-side", - "description": "Used for converting images server-side\n", - "responses": { - "200": { - "description": "The file was retrieved successfully", - "headers": { - "Content-Length": { - "description": "The number of bytes in the file", - "schema": { - "type": "integer" - } - }, - "Content-Type": { - "description": "The MIME type of the file", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "string", - "readOnly": true - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - } - } - }, - "/forgot-password": { - "post": { - "tags": [ - "Users" - ], - "summary": "Sends an email with a link containing a token to reset user password", - "description": "Sends an email with a link containing a token to reset user password\n", - "responses": { - "204": { - "description": "Email sent successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$forgotPasswordForm = new Rebilly\\Entities\\Email();\n$forgotPasswordForm->setEmail('johndoe@test.com');\n\ntry {\n $client->users()->forgotPassword($forgotPasswordForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Email" - } - } - }, - "description": "Email resource", - "required": true - } - } - }, - "/gateway-accounts": { - "get": { - "tags": [ - "Gateway Accounts" - ], - "summary": "Retrieve a list of gateway accounts", - "description": "Retrieve a list of gateway accounts\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Gateway Accounts was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GatewayAccount" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$gatewayAccounts = $client->$gatewayAccounts()->search([\n 'filter' => 'currency:USD',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Gateway Accounts" - ], - "summary": "Create a Gateway Account", - "description": "Create a Gateway Account\n", - "responses": { - "201": { - "description": "Gateway Account was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GatewayAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$gatewayAccountForm = new Rebilly\\Entities\\GatewayAccount();\n\n$gatewayAccountForm->setGatewayName('A1Gateway');\n$gatewayAccountForm->setAcquirerName('Bank of Rebilly');\n$gatewayAccountForm->setOrganizationId('organizationId');\n$gatewayAccountForm->setMerchantCategoryCode(5734);\n$gatewayAccountForm->setWebsites([\n 'websiteId1',\n 'websiteId2',\n]);\n$gatewayAccountForm->setPaymentCardSchemes([\n Rebilly\\Entities\\PaymentCardScheme::SCHEME_VISA,\n Rebilly\\Entities\\PaymentCardScheme::SCHEME_MASTERCARD,\n]);\n$gatewayAccountForm->setMethod(Rebilly\\Entities\\PaymentMethod::METHOD_CASH);\n\n$gatewayConfig = [\n 'accountId' => 'test',\n 'password' => '123',\n];\n\n$gatewayAccountForm->setGatewayConfig($gatewayConfig);\n\ntry {\n $gatewayAccount = $client->gatewayAccounts()->create($gatewayAccountForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/GatewayAccount" - } - } - }, - "/gateway-accounts/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Gateway Accounts" - ], - "summary": "Retrieve a Gateway Account", - "description": "Retrieve a Gateway Account with specified identifier string\n", - "responses": { - "200": { - "description": "Gateway Account was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GatewayAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$gatewayAccount = $client->gatewayAccounts()->load('gatewayAccountId');\n" - } - ] - }, - "put": { - "tags": [ - "Gateway Accounts" - ], - "summary": "Create or update a Gateway Account with predefined ID", - "description": "Create or update a GatewayAccount with predefined identifier string\n", - "responses": { - "200": { - "description": "Gateway Account was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GatewayAccount" - } - } - } - }, - "201": { - "description": "Gateway Account was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GatewayAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$gatewayAccountForm = new Rebilly\\Entities\\GatewayAccount();\n\n$gatewayAccountForm->setGatewayName('A1Gateway');\n$gatewayAccountForm->setAcquirerName('Bank of Rebilly');\n$gatewayAccountForm->setOrganizationId('organizationId');\n$gatewayAccountForm->setMerchantCategoryCode(5734);\n$gatewayAccountForm->setWebsites([\n 'websiteId1',\n 'websiteId2',\n]);\n$gatewayAccountForm->setPaymentCardSchemes([\n Rebilly\\Entities\\PaymentCardScheme::SCHEME_VISA,\n Rebilly\\Entities\\PaymentCardScheme::SCHEME_MASTERCARD,\n]);\n$gatewayAccountForm->setMethod(Rebilly\\Entities\\PaymentMethod::METHOD_CASH);\n\n$gatewayConfig = [\n 'accountId' => 'test',\n 'password' => '123',\n];\n\n$gatewayAccountForm->setGatewayConfig($gatewayConfig);\n\ntry {\n $gatewayAccount = $client->gatewayAccounts()->update('gatewayAccountId', $gatewayAccountForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/GatewayAccount" - } - }, - "patch": { - "tags": [ - "Gateway Accounts" - ], - "summary": "Update a Gateway Account with predefined ID", - "description": "Update a GatewayAccount with predefined identifier string\n", - "responses": { - "200": { - "description": "Gateway Account was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GatewayAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/GatewayAccount" - } - }, - "delete": { - "tags": [ - "Gateway Accounts" - ], - "summary": "Delete a Gateway Account", - "description": "Delete a Gateway Account with predefined identifier string\n", - "responses": { - "204": { - "description": "Gateway Account was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "$ref": "#/components/responses/Conflict" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "try {\n $client->gatewayAccounts()->delete('gatewayAccountId');\n} catch (ServerException $e) {\n echo $e->getMessage();\n}\n" - } - ] - } - }, - "/invoices": { - "get": { - "tags": [ - "Invoices" - ], - "summary": "Retrieve a list of invoices", - "description": "Retrieve a list of invoices\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "name": "Accept", - "in": "header", - "description": "The response media type", - "schema": { - "type": "string", - "enum": [ - "application/json", - "text/csv" - ], - "default": "application/json" - } - } - ], - "responses": { - "200": { - "description": "A list of invoices was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Invoice" - } - } - }, - "text/csv": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Invoice" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoices = $client->invoices()->search([\n 'filter' => 'customerId:testCustomerId',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Invoices" - ], - "summary": "Create an invoice", - "description": "Create an invoice\n", - "responses": { - "201": { - "description": "Invoice was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Invoice" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoiceForm = new Rebilly\\Entities\\Invoice();\n$invoiceForm->setCustomerId('customerId');\n$invoiceForm->setWebsiteId('websiteId');\n$invoiceForm->setCurrency('USD');\n\ntry {\n $invoice = $client->invoices()->create($invoiceForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Invoice" - } - } - }, - "/invoices/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Invoices" - ], - "summary": "Retrieve an invoice", - "description": "Retrieve an invoice with specified identifier string\n", - "parameters": [ - { - "name": "Accept", - "in": "header", - "description": "The response media type", - "schema": { - "type": "string", - "enum": [ - "application/json", - "application/pdf" - ], - "default": "application/json" - } - } - ], - "responses": { - "200": { - "description": "Invoice was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Invoice" - } - }, - "application/pdf": { - "schema": { - "$ref": "#/components/schemas/Invoice" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoice = $client->invoices()->load('invoiceId');\n" - } - ] - }, - "put": { - "tags": [ - "Invoices" - ], - "summary": "Create or update an invoice with predefined ID", - "description": "Create or update an invoice with predefined identifier string\n", - "responses": { - "200": { - "description": "Invoice was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Invoice" - } - } - } - }, - "201": { - "description": "Invoice was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Invoice" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoiceForm = new Rebilly\\Entities\\Invoice();\n$invoiceForm->setCustomerId('customerId');\n$invoiceForm->setWebsiteId('websiteId');\n$invoiceForm->setCurrency('USD');\n\ntry {\n $invoice = $client->invoices()->update('invoiceId', $invoiceForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Invoice" - } - } - }, - "/invoices/{id}/abandon": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Invoices" - ], - "summary": "Abandon an invoice", - "description": "Abandon an invoice with specified identifier string\n", - "responses": { - "201": { - "description": "Invoice was abandoned successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Invoice" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoice = $client->invoices()->abandon('invoiceId');\n" - } - ] - } - }, - "/invoices/{id}/issue": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Invoices" - ], - "summary": "Issue an invoice", - "description": "Issue an invoice with specified identifier string\n", - "responses": { - "201": { - "description": "Invoice was issued successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Invoice" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoice = $client->invoices()->issue('invoiceId', '2025-01-01 05:00:00');\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvoiceIssue" - } - } - }, - "description": "InvoiceIssue resource", - "required": true - } - } - }, - "/invoices/{id}/items": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Invoices" - ], - "summary": "Retrieve invoice items", - "description": "Retrieve an invoice items with specified invoice identifier string\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "Invoice items were retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/InvoiceItem" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoiceItems = $client->invoiceItems()->search('invoiceId', [\n 'filter' => 'quantity:5',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Invoices" - ], - "summary": "Create an invoice item", - "description": "Create an invoice item\n", - "responses": { - "201": { - "description": "InvoiceItem was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvoiceItem" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoiceItemForm = new Rebilly\\Entities\\InvoiceItem();\n$invoiceItemForm->setType($invoiceItemForm::TYPE_DEBIT);\n$invoiceItemForm->setUnitPrice(0.99);\n$invoiceItemForm->setQuantity(5);\n\ntry {\n $invoiceItem = $client->invoiceItems()->create($invoiceItemForm, 'invoiceId');\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvoiceItem" - } - } - }, - "description": "InvoiceItem resource", - "required": true - } - } - }, - "/invoices/{id}/lead-source": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Invoices" - ], - "summary": "Retrieve an invoice's Lead Source", - "description": "Retrieve a Lead Source of given invoice\n", - "responses": { - "200": { - "description": "Lead Source was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoice = $client->invoices()->load('invoiceId');\n$leadSource = $invoice->getLeadSource();\n" - } - ] - }, - "put": { - "tags": [ - "Invoices" - ], - "summary": "Create a Lead Source for an invoice", - "description": "Create a Lead Source for an invoice\n", - "responses": { - "200": { - "description": "Lead Source was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "201": { - "description": "Lead Source was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$leadSourceForm = new Rebilly\\Entities\\LeadSource();\n$leadSourceForm->setSource('TestSource');\n$leadSourceForm->setCampaign('TestCampaign');\n\ntry {\n $invoice = $client->invoices()->updateLeadSource('invoiceId', $leadSourceForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/LeadSource" - } - }, - "delete": { - "tags": [ - "Invoices" - ], - "summary": "Delete a Lead Source for an invoice", - "description": "Delete a Lead Source that belongs to a certain invoice\n", - "responses": { - "204": { - "description": "Lead Source was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Lead Source cannot be deleted" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoice = $client->invoices()->deleteLeadSource('invoiceId');\n" - } - ] - } - }, - "/invoices/{id}/void": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Invoices" - ], - "summary": "Void an invoice", - "description": "Void an invoice with specified identifier string\n", - "responses": { - "201": { - "description": "Invoice was voided successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Invoice" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$invoice = $client->invoices()->void('invoiceId');\n" - } - ] - } - }, - "/layouts": { - "get": { - "tags": [ - "Layouts" - ], - "summary": "Retrieve a layout list", - "description": "Retrieve a layout list\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "Layout list was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Layout" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$layouts = $client->layouts()->search([\n 'filter' => 'name:TestLayout',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Layouts" - ], - "summary": "Create a layout", - "description": "Create a layout\n", - "responses": { - "201": { - "description": "Layout was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Layout" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$layoutForm = new Rebilly\\Entities\\Layout();\n$layoutItemForm = new Rebilly\\Entities\\LayoutItem();\n\n$layoutItemForm->setPlanId('planId');\n$layoutItemForm->setStarred(false);\n\n$layoutForm->setName('TestLayout');\n$layoutForm->setLayoutItems([\n $layoutItemForm,\n]);\n\ntry {\n $layout = $client->layouts()->create($layoutForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Layout" - } - } - }, - "/layouts/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Layouts" - ], - "summary": "Retrieve a layout", - "description": "Retrieve a layout with specified identifier string\n", - "responses": { - "200": { - "description": "Layout was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Layout" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$layout = $client->layouts()->load('layoutId');\n" - } - ] - }, - "put": { - "tags": [ - "Layouts" - ], - "summary": "Create or update a layout with predefined ID", - "description": "Create or update a layout with predefined identifier string\n", - "responses": { - "200": { - "description": "Layout was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Layout" - } - } - } - }, - "201": { - "description": "Layout was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Layout" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$layoutForm = new Rebilly\\Entities\\Layout();\n$layoutItemForm = new Rebilly\\Entities\\LayoutItem();\n\n$layoutItemForm->setPlanId('planId');\n$layoutItemForm->setStarred(false);\n\n$layoutForm->setName('TestLayout');\n$layoutForm->setLayoutItems([\n $layoutItemForm,\n]);\n\ntry {\n $layout = $client->layouts()->update('layoutId', $layoutForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Layout" - } - }, - "delete": { - "tags": [ - "Layouts" - ], - "summary": "Delete a layout", - "description": "Delete a layout with predefined identifier string\n", - "responses": { - "204": { - "description": "Layout was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->layouts()->delete('layoutId');\n" - } - ] - } - }, - "/lists": { - "get": { - "tags": [ - "Lists" - ], - "summary": "Retrieve a collection of Lists (latest version of each List)", - "description": "Retrieve a collection of Lists\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "$ref": "#/components/parameters/collectionFilter" - }, - { - "$ref": "#/components/parameters/collectionCriteria" - }, - { - "$ref": "#/components/parameters/collectionSort" - } - ], - "responses": { - "200": { - "description": "A collection of Lists was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/List" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - }, - "post": { - "tags": [ - "Lists" - ], - "summary": "Create a List", - "description": "Create a List\n", - "responses": { - "201": { - "description": "List was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/List" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/List" - } - } - }, - "/lists/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Lists" - ], - "summary": "Retrieve list's latest version", - "description": "Retrieve latest version of List with specified identifier string\n", - "responses": { - "200": { - "description": "List was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/List" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "put": { - "tags": [ - "Lists" - ], - "summary": "Create or update a list with predefined ID", - "description": "Create or update a list with predefined identifier string\n", - "responses": { - "200": { - "description": "List was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/List" - } - } - } - }, - "201": { - "description": "List was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/List" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/List" - } - }, - "delete": { - "tags": [ - "Lists" - ], - "summary": "Delete a list", - "description": "Delete a list with predefined identifier string\n", - "responses": { - "204": { - "description": "List was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "List is used in Rules and cannot be deleted" - } - } - } - }, - "/lists/{id}/{version}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - }, - { - "name": "version", - "in": "path", - "required": true, - "description": "List version", - "schema": { - "type": "integer", - "minimum": 1 - } - } - ], - "get": { - "tags": [ - "Lists" - ], - "summary": "Retrieve List's exact version", - "responses": { - "200": { - "description": "List's exact version was retrieved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/List" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/notes": { - "get": { - "tags": [ - "Notes" - ], - "summary": "Retrieve a list of notes", - "description": "Retrieve a list of notes\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Notes was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Note" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$notes = $client->notes()->search([\n 'filter' => 'relatedType:customer',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Notes" - ], - "summary": "Create a note", - "description": "Create a note\n", - "responses": { - "201": { - "description": "Note was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Note" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$noteForm = new Rebilly\\Entities\\Note();\n$noteForm->setRelatedId('customerId');\n$noteForm->setRelatedType(Rebilly\\Entities\\ResourceType::TYPE_CUSTOMER);\n$noteForm->setContent('Test Note');\n\ntry {\n $note = $client->notes()->create($noteForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Note" - } - } - }, - "/notes/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Notes" - ], - "summary": "Retrieve a note", - "description": "Retrieve a note with specified identifier string\n", - "responses": { - "200": { - "description": "Note was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Note" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$note = $client->notes()->load('noteId');\n" - } - ] - }, - "put": { - "tags": [ - "Notes" - ], - "summary": "Create or update a note with predefined ID", - "description": "Create or update a note with predefined identifier string\n", - "responses": { - "200": { - "description": "Note was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Note" - } - } - } - }, - "201": { - "description": "Note was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Note" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$noteForm = new Rebilly\\Entities\\Note();\n$noteForm->setRelatedId('customerId');\n$noteForm->setRelatedType(Rebilly\\Entities\\ResourceType::TYPE_CUSTOMER);\n$noteForm->setContent('Test Note');\n\ntry {\n $note = $client->notes()->update('noteId', $noteForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Note" - } - } - }, - "/organizations": { - "get": { - "tags": [ - "Organizations" - ], - "summary": "Retrieve a list of organizations", - "description": "Retrieve a list of organizations\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of organizations was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Organization" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$organizations = $client->organizations()->search([\n 'filter' => 'city:Test',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Organizations" - ], - "summary": "Create a organization", - "description": "Create a organization\n", - "responses": { - "201": { - "description": "Organization was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Organization" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$organizationForm = new Rebilly\\Entities\\Organization();\n$organizationForm->setName('Test Organization');\n$organizationForm->setCountry('US');\n\ntry {\n $organization = $client->organizations()->create($organizationForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Organization" - } - } - }, - "/organizations/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Organizations" - ], - "summary": "Retrieve a organization", - "description": "Retrieve a organization with specified identifier string\n", - "responses": { - "200": { - "description": "Organization was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Organization" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$organization = $client->organizations()->load('organizationId');\n" - } - ] - }, - "put": { - "tags": [ - "Organizations" - ], - "summary": "Create or update a organization with predefined ID", - "description": "Create or update a organization with predefined identifier string\n", - "responses": { - "200": { - "description": "Organization was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Organization" - } - } - } - }, - "201": { - "description": "Organization was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Organization" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$organizationForm = new Rebilly\\Entities\\Organization();\n$organizationForm->setName('Test Organization');\n$organizationForm->setCountry('US');\n\ntry {\n $organization = $client->organizations()->update('organizationId', $organizationForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Organization" - } - }, - "delete": { - "tags": [ - "Organizations" - ], - "summary": "Delete a organization", - "description": "Delete a organization with predefined identifier string\n", - "responses": { - "204": { - "description": "Organization was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Organization has related resources and cannot be deleted", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } - }, - "/password-tokens": { - "get": { - "tags": [ - "Customer Authentication" - ], - "summary": "Retrieve a list of tokens", - "description": "Retrieve a list of tokens\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Reset Password Tokens was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResetPasswordToken" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$resetPasswordTokens = $client->resetPasswordTokens()->search([\n 'filter' => 'token:string',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Customer Authentication" - ], - "summary": "Create a Reset Password Token", - "description": "Create a Reset Password Token\n", - "responses": { - "201": { - "description": "Reset Password Token was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResetPasswordToken" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$resetPasswordTokenForm = new Rebilly\\Entities\\ResetPasswordToken();\n$resetPasswordTokenForm->setUserName('test');\n$resetPasswordTokenForm->setPassword('1234');\n\ntry {\n $$resetPasswordToken = $client->resetPasswordTokens()->create($resetPasswordTokenForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResetPasswordToken" - } - } - }, - "description": "ResetPasswordToken resource", - "required": true - } - } - }, - "/password-tokens/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Customer Authentication" - ], - "summary": "Retrieve a Reset Password Token", - "description": "Retrieve a Reset Password Token with specified identifier string\n", - "responses": { - "200": { - "description": "ResetPasswordToken was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResetPasswordToken" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$resetPasswordToken = $client->resetPasswordTokens()->load('tokenId');\n" - } - ] - }, - "delete": { - "tags": [ - "Customer Authentication" - ], - "summary": "Delete a Reset Password Token", - "description": "Delete a Reset Password Token with predefined identifier string\n", - "responses": { - "204": { - "description": "ResetPasswordToken was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "ResetPasswordToken has related resources and cannot be deleted" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "try {\n $client->websites()->delete('websiteId');\n} catch (ServerException $e) {\n echo $e->getMessage();\n}\n" - } - ] - } - }, - "/payment-cards-migrations": { - "get": { - "tags": [ - "Migrate payment cards" - ], - "summary": "Retrieve a list of payment cards ready for migration", - "description": "Retrieve a list of payment cards ready for migration\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of payment cards was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PaymentCard" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentCardMigrations = $client->paymentCardMigrations()->search([\n 'filter' => 'status:active',\n]);\n" - } - ] - } - }, - "/payment-cards-migrations/migrate": { - "post": { - "tags": [ - "Migrate payment cards" - ], - "summary": "Migrate payment cards to another gateway account", - "description": "Migrate payment cards to another gateway account\n", - "responses": { - "201": { - "description": "Migration command was accepted", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentCardMigrationResponse" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentCardMigrationForm = new Rebilly\\Entities\\PaymentCardMigrationsRequest();\n$paymentCardMigrationForm->setFromGatewayAccountId('gatewayAccountId');\n$paymentCardMigrationForm->setToGatewayAccountId('newGatewayAccountId');\n\n$paymentCardIds = [\n 'testPaymentCardId',\n 'testPaymentCardId2',\n];\n\n$paymentCardMigrationForm->setPaymentCardIds($paymentCardIds)\n\ntry {\n $paymentCardMigrationResponse = $client->paymentCardMigrations()->migrate($paymentCardMigrationForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentCardMigrationRequest" - } - } - }, - "description": "Payment card migration attributes", - "required": true - } - } - }, - "/payment-cards": { - "get": { - "tags": [ - "Payment Cards" - ], - "summary": "Retrieve a list of Payment Cards", - "description": "Retrieve a list of Payments Cards\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Payment Card was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PaymentCard" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentCards = $client->paymentCards()->search([\n 'filter' => 'status:active',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Payment Cards" - ], - "summary": "Create a Payment Card", - "description": "Create a Payment Card\n", - "responses": { - "201": { - "description": "Payment Card was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentCard" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentCardForm = new Rebilly\\Entities\\PaymentCard();\n$paymentCardForm->setCustomerId('customerId');\n$paymentCardForm->setPan('4111111111111111');\n$paymentCardForm->setExpYear(2025);\n$paymentCardForm->setExpMonth(8);\n$paymentCardForm->setBillingContactId('contactId');\n\ntry {\n $paymentCard = $client->paymentCards()->create($paymentCardForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentCard" - } - } - }, - "description": "PaymentCard resource", - "required": true - } - } - }, - "/payment-cards/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Payment Cards" - ], - "summary": "Retrieve a Payment Card", - "description": "Retrieve a Payment Card with specified identifier string\n", - "responses": { - "200": { - "description": "PaymentCard was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentCard" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentCard = $client->paymentCards()->load('paymentCardId');\n" - } - ] - }, - "patch": { - "tags": [ - "Payment Cards" - ], - "summary": "Update a payment card's cvv value with predefined ID", - "description": "Update a payment card's cvv value with predefined identifier string\n", - "responses": { - "200": { - "description": "Gateway Account was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentCard" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "cvv": { - "description": "Card's cvv (card verification value).", - "type": "string" - } - } - } - } - }, - "description": "Payment card", - "required": true - } - }, - "put": { - "tags": [ - "Payment Cards" - ], - "summary": "Create a payment card with predefined ID", - "responses": { - "201": { - "description": "Payment card was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentCard" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "409": { - "description": "Payment card already exists and cannot be updated", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentCardForm = new Rebilly\\Entities\\PaymentCard();\n$paymentCardForm->setCustomerId('customerId');\n$paymentCardForm->setPan('4111111111111111');\n$paymentCardForm->setExpYear(2025);\n$paymentCardForm->setExpMonth(8);\n$paymentCardForm->setBillingContactId('contactId');\n\ntry {\n $paymentCard = $client->paymentCards()->create($paymentCardForm, 'paymentCardId');\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentCard" - } - } - }, - "description": "Payment card", - "required": true - } - } - }, - "/payment-cards/{id}/authorization": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Payment Cards" - ], - "summary": "Authorize a Payment Card", - "description": "Authorize a Payment Card\n", - "responses": { - "201": { - "description": "Authorization successful", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentCard" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentCardAuthorizationForm = new Rebilly\\Entities\\PaymentCardAuthorization();\n$paymentCardAuthorizationForm->setWebsiteId('websiteId');\n$paymentCardAuthorizationForm->setCurrency('USD');\n$paymentCardAuthorizationForm->setGatewayAccountId('gatewayAccountId');\n\ntry {\n $paymentCard = $client->paymentCards()->authorize('paymentCardId', $paymentCardAuthorizationForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "websiteId", - "currency" - ], - "properties": { - "websiteId": { - "description": "The Website ID", - "type": "string" - }, - "currency": { - "description": "Currency (three letter code)", - "type": "string" - }, - "gatewayAccountId": { - "description": "The Gateway account ID", - "type": "string" - }, - "amount": { - "description": "Amount", - "type": "number", - "format": "double" - } - } - } - } - }, - "description": "Payment Card resource", - "required": true - } - } - }, - "/payment-cards/{id}/deactivation": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Payment Cards" - ], - "summary": "Deactivate a Payment Card", - "description": "Deactivate a Payment Card\n", - "responses": { - "201": { - "description": "Authorization successful", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentCard" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->paymentCards()->deactivate('paymentCardId');\n" - } - ] - } - }, - "/payments": { - "get": { - "tags": [ - "Payments" - ], - "summary": "Retrieve a payment list", - "description": "Retrieve a payment list\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "name": "Accept", - "in": "header", - "description": "The response media type", - "schema": { - "type": "string", - "enum": [ - "application/json", - "text/csv" - ], - "default": "application/json" - } - } - ], - "responses": { - "200": { - "description": "Payment list was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Payment" - } - } - }, - "text/csv": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Payment" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$payments = $client->payments()->search([\n 'filter' => 'currency:USD',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Payments" - ], - "summary": "Create a payment", - "description": "Create a payment\n", - "responses": { - "201": { - "description": "Payment was processed", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Payment" - } - } - } - } - }, - "202": { - "description": "Payment was accepted", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Payment" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "409": { - "$ref": "#/components/responses/Conflict" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentForm = new Rebilly\\Entities\\Payment();\n\n$paymentForm->setWebsiteId('websiteId');\n$paymentForm->setCustomerId('customerId');\n$paymentForm->setCurrency('USD');\n$paymentForm->setAmount(1.99);\n\n$data = [\n 'method' => Rebilly\\Entities\\PaymentMethod::METHOD_CASH,\n];\n\n$paymentInstrumentForm = new Rebilly\\Entities\\PaymentMethodInstrument($data);\n\n$paymentForm->setPaymentInstrument($paymentInstrumentForm);\n\ntry {\n $payment = $client->payments()->create($paymentForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Payment" - } - } - }, - "/payments/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Payments" - ], - "summary": "Retrieve a payment", - "description": "Retrieve a payment with specified identifier string\n", - "responses": { - "200": { - "description": "Payment was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Payment" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$payment = $client->payments()->load('paymentId');\n" - } - ] - }, - "put": { - "tags": [ - "Payments" - ], - "summary": "Create a payment with predefined ID", - "description": "Make a payment with predefined identifier string\n", - "responses": { - "201": { - "description": "Payment was processed", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Payment" - } - } - } - } - }, - "202": { - "description": "Payment was accepted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Payment" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentForm = new Rebilly\\Entities\\Payment();\n\n$paymentForm->setWebsiteId('websiteId');\n$paymentForm->setCustomerId('customerId');\n$paymentForm->setCurrency('USD');\n$paymentForm->setAmount(1.99);\n\n$data = [\n 'method' => Rebilly\\Entities\\PaymentMethod::METHOD_CASH,\n];\n\n$paymentInstrumentForm = new Rebilly\\Entities\\PaymentMethodInstrument($data);\n\n$paymentForm->setPaymentInstrument($paymentInstrumentForm);\n\ntry {\n $payment = $client->payments()->update('paymentId', $paymentForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Payment" - } - } - }, - "/paypal-accounts": { - "get": { - "tags": [ - "PayPal Accounts" - ], - "summary": "Retrieve a list of PayPal accounts", - "description": "Retrieve a list of PayPal Accounts\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of PayPal Accounts was retrieved successfully", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PayPalAccount" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - }, - "post": { - "tags": [ - "PayPal Accounts" - ], - "summary": "Create a PayPal Account", - "description": "Create a PayPal Account\n", - "responses": { - "201": { - "description": "PayPal Account was created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PayPalAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PayPalAccount" - } - } - }, - "description": "PayPalAccount resource", - "required": true - } - } - }, - "/paypal-accounts/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "PayPal Accounts" - ], - "summary": "Retrieve a PayPal Account", - "description": "Retrieve a PayPal Account with specified identifier string\n", - "responses": { - "200": { - "description": "PayPal Account was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PayPalAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "put": { - "tags": [ - "PayPal Accounts" - ], - "summary": "Create a PayPal account with predefined ID", - "responses": { - "201": { - "description": "PayPal Account was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PayPalAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "409": { - "description": "PayPal Account exist and cannot be updated", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PayPalAccount" - } - } - }, - "description": "PayPal Account", - "required": true - } - } - }, - "/paypal-accounts/{id}/activation": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "PayPal Accounts" - ], - "summary": "Activate a PayPal Account", - "description": "Activate a PayPal Account\n", - "responses": { - "201": { - "description": "Activate successful", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PayPalAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "websiteId", - "currency" - ], - "properties": { - "websiteId": { - "description": "The Website ID", - "type": "string" - }, - "currency": { - "description": "Currency (three letter code)", - "type": "string" - }, - "amount": { - "description": "The amount to authorize", - "type": "number", - "format": "double", - "default": 1 - }, - "redirectURLs": { - "description": "Redirect URLs", - "type": "object" - }, - "gatewayAccountId": { - "description": "The Gateway Account ID which use to send transactions", - "type": "string" - } - } - } - } - }, - "description": "PayPal Account resource", - "required": true - } - } - }, - "/paypal-accounts/{id}/deactivation": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "PayPal Accounts" - ], - "summary": "Deactivate a PayPal Account", - "description": "Deactivate a PayPal Account\n", - "responses": { - "201": { - "description": "Deactivate successful", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PayPalAccount" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - } - } - }, - "/plans": { - "get": { - "tags": [ - "Plans" - ], - "summary": "Retrieve a list of plans", - "description": "Retrieve a list of plans\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Plans was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Plan" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$plans = $client->plans()->search([\n 'filter' => 'name:TestPlan',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Plans" - ], - "summary": "Create a plan", - "description": "Create a plan\n", - "responses": { - "201": { - "description": "Plan was created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Plan" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$planForm = new Rebilly\\Entities\\Plan();\n$planForm->setName('TestPlan');\n$planForm->setCurrency('USD');\n$planForm->setTrialAmount(1);\n$planForm->setTrialPeriodUnit('day');\n$planForm->setTrialPeriodLength(1);\n\ntry {\n $plan = $client->plans()->create($planForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Plan" - } - } - }, - "/plans/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Plans" - ], - "summary": "Retrieve a plan", - "description": "Retrieve a plan with specified identifier string\n", - "responses": { - "200": { - "description": "Plan was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Plan" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$plan = $client->plans()->load('planId');\n" - } - ] - }, - "put": { - "tags": [ - "Plans" - ], - "summary": "Create or update a Plan with predefined ID", - "description": "Create or update a Plan with predefined identifier string\n", - "responses": { - "200": { - "description": "Plan was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Plan" - } - } - } - }, - "201": { - "description": "Plan was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Plan" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$planForm = new Rebilly\\Entities\\Plan();\n$planForm->setName('TestPlan');\n$planForm->setCurrency('USD');\n$planForm->setTrialAmount(1);\n$planForm->setTrialPeriodUnit('day');\n$planForm->setTrialPeriodLength(1);\n\ntry {\n $plan = $client->plans()->update('planId', $planForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Plan" - } - }, - "delete": { - "tags": [ - "Plans" - ], - "summary": "Delete a Plan", - "description": "Delete a Plan with predefined identifier string\n", - "responses": { - "204": { - "description": "Plan was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->plans()->delete('planId');\n" - } - ] - } - }, - "/previews/rule-actions/send-email": { - "post": { - "tags": [ - "Rules" - ], - "summary": "Send a test email", - "description": "Send a test email\n", - "security": [ - { - "RebAuth": [] - } - ], - "responses": { - "200": { - "description": "Test email was sent", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SendTestEmail" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SendTestEmail" - } - } - }, - "description": "Test email resource", - "required": true - } - } - }, - "/previews/rule-actions/trigger-webhook": { - "post": { - "tags": [ - "Rules" - ], - "summary": "Trigger a test webhook", - "description": "Trigger a test webhook\n", - "security": [ - { - "RebAuth": [] - } - ], - "responses": { - "200": { - "description": "Test webhook was triggered", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SendPreviewWebhook" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SendPreviewWebhook" - } - } - }, - "description": "Test webhook resource", - "required": true - } - } - }, - "/previews/webhooks": { - "post": { - "tags": [ - "Webhooks" - ], - "summary": "Trigger a test webhook", - "description": "Trigger a test webhook\n", - "responses": { - "204": { - "description": "Test webhook was triggered", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/GlobalWebhook" - } - } - }, - "/products": { - "get": { - "tags": [ - "Products" - ], - "summary": "Retrieve a list of products", - "description": "Retrieve a list of products\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of products was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Product" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - }, - "post": { - "tags": [ - "Products" - ], - "summary": "Create a Product", - "description": "Create a Product\n", - "responses": { - "201": { - "description": "Product was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Product" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/Product" - } - } - }, - "/products/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Products" - ], - "summary": "Retrieve a product", - "description": "Retrieve a product with specified identifier string\n", - "responses": { - "200": { - "description": "Product was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Product" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "put": { - "tags": [ - "Products" - ], - "summary": "Create a product with predefined ID", - "description": "Create a product with predefined identifier string\n", - "responses": { - "200": { - "description": "Product was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Product" - } - } - } - }, - "201": { - "description": "Product was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Product" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/Product" - } - }, - "delete": { - "tags": [ - "Products" - ], - "summary": "Delete a product", - "description": "Delete a product with predefined identifier string\n", - "responses": { - "204": { - "description": "Product was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/profile": { - "get": { - "tags": [ - "Profile" - ], - "summary": "Retrieve user's profile", - "description": "Retrieve user's profile\n", - "responses": { - "200": { - "description": "Profile was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Profile" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "put": { - "tags": [ - "Profile" - ], - "summary": "Update user's profile", - "description": "Update user's profile\n", - "responses": { - "200": { - "description": "Profile was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Profile" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Profile" - } - } - }, - "description": "Profile resource", - "required": true - } - } - }, - "/profile/password": { - "post": { - "tags": [ - "Profile" - ], - "summary": "Updates user's password with the specified newPassword", - "description": "Updates user's password with the specified newPassword. And checks if currentPassword matches the actual one.\n", - "responses": { - "201": { - "description": "Password updated successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Profile" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/UpdatePassword" - } - } - }, - "/profile/totp-reset": { - "post": { - "tags": [ - "Profile" - ], - "summary": "Reset (renew) totpSecret", - "description": "Reset (renew) totpSecret\n", - "responses": { - "201": { - "description": "totpSecret reset (renewed) successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Profile" - } - } - } - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/queue/custom-events": { - "get": { - "tags": [ - "Custom Events" - ], - "summary": "Retrieve a list of scheduled custom events", - "description": "Retrieve a list of scheduled custom events\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of scheduled custom events was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomEvent" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - } - }, - "/queue/custom-events/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Custom Events" - ], - "summary": "Retrieve a scheduled custom event", - "description": "Retrieve a scheduled custom event with predefined identifier string\n", - "responses": { - "200": { - "description": "Scheduled custom event was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomEvent" - } - } - } - }, - "303": { - "description": "Custom event was successfully processed and moved out from queue", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomEvent" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "delete": { - "tags": [ - "Custom Events" - ], - "summary": "Delete a scheduled custom event", - "description": "Delete a scheduled custom event with predefined identifier string\n", - "responses": { - "204": { - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "description": "Scheduled custom event was deleted" - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/queue/payments": { - "get": { - "tags": [ - "Payments" - ], - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "summary": "Retrieve a scheduled payment list", - "description": "Retrieve a scheduled payment list\n", - "responses": { - "200": { - "description": "Successful retrieve the payments list that still waiting to be processed", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Payment" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$payments = $client->payments()->searchInQueue([\n 'filter' => 'currency:USD',\n]);\n" - } - ] - } - }, - "/queue/payments/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Payments" - ], - "summary": "Retrieve a scheduled payment", - "description": "Retrieve a payment with specified identifier string\n", - "responses": { - "200": { - "description": "Successful retrieve the payment that still waiting to be processed", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Payment" - } - } - } - }, - "303": { - "description": "Payment was successfully processed and moved out from queue", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Payment" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$payment = $client->payments()->loadFromQueue('paymentId');\n" - } - ] - }, - "put": { - "tags": [ - "Payments" - ], - "summary": "Update pending payment", - "responses": { - "200": { - "description": "Payment was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Payment" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Payment is already handled and cannot be updated" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/Payment" - } - } - }, - "/sessions": { - "get": { - "tags": [ - "Sessions" - ], - "summary": "Retrieve a list of sessions", - "description": "Retrieve a list of sessions\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Sessions was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Session" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$sessions = $client->sessions()->search([\n 'filter' => 'userId:testUserId',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Sessions" - ], - "summary": "Create a session", - "description": "Create a session\n", - "responses": { - "201": { - "description": "Session was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Session" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$sessionForm = new Rebilly\\Entities\\Session();\n\n$permissions = [\n // Example permission to use GET and POST methods only for certain Customers\n [\n 'resourceName' => Rebilly\\Entities\\ResourceType::TYPE_CUSTOMERS,\n 'methods' => [\n $sessionForm::METHOD_GET,\n $sessionForm::METHOD_POST,\n ],\n 'resourceIds' => [\n 'testCustomerId',\n 'testCustomerId2',\n ],\n ],\n // Example permission to use all methods for Websites resource\n [\n 'resourceName' => Rebilly\\Entities\\ResourceType::TYPE_WEBSITES,\n 'methods' => [\n $sessionForm::METHOD_GET,\n $sessionForm::METHOD_POST,\n $sessionForm::METHOD_PUT,\n $sessionForm::METHOD_HEAD,\n $sessionForm::METHOD_DELETE,\n ],\n ],\n // Example permission to use all methods for all resources\n [],\n];\n\n$sessionForm->setPermissions($permissions);\n\ntry {\n $session = $client->sessions()->create($sessionForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Session" - } - } - }, - "description": "Sessions resource", - "required": true - } - } - }, - "/sessions/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Sessions" - ], - "summary": "Retrieve a Session", - "description": "Retrieve a Session with specified identifier string\n", - "responses": { - "200": { - "description": "Session was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Session" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$session = $client->sessions()->load('sessionId');\n" - } - ] - }, - "put": { - "tags": [ - "Sessions" - ], - "summary": "Create or update a Session with predefined ID", - "description": "Create or update a Session with predefined identifier string\n", - "responses": { - "200": { - "description": "Session was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Session" - } - } - } - }, - "201": { - "description": "Session was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Session" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$sessionForm = new Rebilly\\Entities\\Session();\n\n$permissions = [\n [\n 'resourceName' => Rebilly\\Entities\\ResourceType::TYPE_CUSTOMERS,\n 'methods' => [\n $sessionForm::METHOD_GET,\n $sessionForm::METHOD_POST,\n ],\n 'resourceIds' => [\n 'testCustomerId',\n 'testCustomerId2',\n ],\n ],\n [\n 'resourceName' => Rebilly\\Entities\\ResourceType::TYPE_WEBSITES,\n 'methods' => [\n $sessionForm::METHOD_GET,\n $sessionForm::METHOD_POST,\n ],\n 'resourceIds' => [\n 'testWebsiteId',\n 'testWebsiteId2',\n ],\n ],\n];\n\n$sessionForm->setPermissions($permissions);\n\ntry {\n $session = $client->sessions()->update('sessionId', $sessionForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Session" - } - } - }, - "description": "Session resource", - "required": true - } - }, - "delete": { - "tags": [ - "Sessions" - ], - "summary": "Delete a Session", - "description": "Delete a Session with predefined identifier string\n", - "responses": { - "204": { - "description": "Session was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Session has related resources and cannot be deleted" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "try {\n $client->sessions()->delete('sessionId');\n} catch (ServerException $e) {\n echo $e->getMessage();\n}\n" - } - ] - } - }, - "/shipping-zones": { - "get": { - "tags": [ - "Shipping Zones" - ], - "summary": "Retrieve a list of shipping zones", - "description": "Retrieve a list of shipping zones\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of shipping zones was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ShippingZone" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - }, - "post": { - "tags": [ - "Shipping Zones" - ], - "summary": "Create a Shipping Zone", - "description": "Create a Shipping Zone\n", - "responses": { - "201": { - "description": "Shipping Zone was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShippingZone" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShippingZone" - } - } - }, - "description": "Shipping Zone resource", - "required": true - } - } - }, - "/shipping-zones/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Shipping Zones" - ], - "summary": "Retrieve a shipping zone", - "description": "Retrieve a shipping zone with specified identifier string\n", - "responses": { - "200": { - "description": "Shipping zone was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShippingZone" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "put": { - "tags": [ - "Shipping Zones" - ], - "summary": "Create a shipping zone with predefined ID", - "description": "Create a shipping zone with predefined identifier string\n", - "responses": { - "200": { - "description": "Shipping zone was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShippingZone" - } - } - } - }, - "201": { - "description": "Shipping zone was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShippingZone" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShippingZone" - } - } - }, - "description": "Shipping zone resource", - "required": true - } - }, - "delete": { - "tags": [ - "Shipping Zones" - ], - "summary": "Delete a shipping zone", - "description": "Delete a shipping zone with predefined identifier string\n", - "responses": { - "204": { - "description": "Shipping zone was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/signin": { - "post": { - "tags": [ - "Users", - "Sessions" - ], - "summary": "Create a session with email and password", - "description": "Create a session with email and password\n", - "security": [], - "responses": { - "201": { - "description": "Session was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Session" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$loginForm = new Rebilly\\Entities\\Login();\n$loginForm->setEmail('test@test.com');\n$loginForm->setPassword('1234');\n\ntry {\n $user = $client->users()->signin($loginForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Signin" - } - } - }, - "description": "Signin resource", - "required": true - } - } - }, - "/signup": { - "post": { - "tags": [ - "Users" - ], - "summary": "Creates a new user and sends an email confirmation", - "description": "Creates a new user and sends an email confirmation\n", - "responses": { - "201": { - "description": "User was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$signupForm = new Rebilly\\Entities\\Signup();\n$signupForm->setFirstName('John');\n$signupForm->setLastName('Doe');\n$signupForm->setEmail('johndoe@test.com');\n$signupForm->setBusinessPhone('+123456789');\n$signupForm->setPassword('1234');\n\ntry {\n $client->users()->signup($signupForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Signup" - } - } - }, - "description": "Signup resource", - "required": true - } - } - }, - "/status": { - "get": { - "tags": [ - "Status" - ], - "summary": "Retrieve API current status", - "description": "Retrieve API current status\n", - "security": [], - "responses": { - "200": { - "description": "Status was received", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Status" - } - } - } - } - } - } - }, - "/subscriptions": { - "get": { - "tags": [ - "Subscriptions" - ], - "summary": "Retrieve a list of subscriptions", - "description": "Retrieve a list of subscriptions\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "name": "Accept", - "in": "header", - "description": "The response media type", - "schema": { - "type": "string", - "enum": [ - "application/json", - "text/csv" - ], - "default": "application/json" - } - } - ], - "responses": { - "200": { - "description": "A list of subscriptions was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Subscription" - } - } - }, - "text/csv": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Subscription" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$subscriptions = $client->subscriptions()->search([\n 'filter' => 'customerId:testCustomerId',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Subscriptions" - ], - "summary": "Create a subscription", - "description": "Create a subscription\n", - "responses": { - "201": { - "description": "Subscription was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Subscription" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$subscriptionForm = new Rebilly\\Entities\\Subscription();\n$subscriptionForm->setCustomerId('customerId');\n$subscriptionForm->setWebsiteId('websiteId');\n$subscriptionForm->setPlanId('planId');\n\ntry {\n $subscription = $client->subscriptions()->create($subscriptionForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Subscription" - } - } - }, - "/subscriptions/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Subscriptions" - ], - "summary": "Retrieve a subscription", - "description": "Retrieve a subscription with specified identifier string\n", - "responses": { - "200": { - "description": "Subscription was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Subscription" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$subscription = $client->subscriptions()->load('subscriptionId');\n" - } - ] - }, - "put": { - "tags": [ - "Subscriptions" - ], - "summary": "Create or update a subscription with predefined ID", - "description": "Create or update a subscription with predefined identifier string\n", - "responses": { - "200": { - "description": "Subscription was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Subscription" - } - } - } - }, - "201": { - "description": "Subscription was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Subscription" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$subscriptionForm = new Rebilly\\Entities\\Subscription();\n$subscriptionForm->setCustomerId('customerId');\n$subscriptionForm->setWebsiteId('websiteId');\n$subscriptionForm->setPlanId('planId');\n\ntry {\n $subscription = $client->subscriptions()->update('subscriptionId', $subscriptionForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Subscription" - } - } - }, - "/subscriptions/{id}/cancel": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Subscriptions" - ], - "summary": "Cancel a subscription", - "description": "Cancel a subscription\n", - "responses": { - "201": { - "description": "Subscription was switched", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Subscription" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$subscriptionCancelForm = new Rebilly\\Entities\\SubscriptionCancel();\n$subscriptionCancelForm->setPolicy($subscriptionCancelForm::NOW);\n\ntry {\n $subscription = $client->subscriptions()->cancel('subscriptionId', $subscriptionCancelForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SubscriptionCancel" - } - } - }, - "description": "Only policy", - "required": true - } - } - }, - "/subscriptions/{id}/lead-source": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Subscriptions" - ], - "summary": "Retrieve a subscription's Lead Source", - "description": "Retrieve a Lead Source of given subscription\n", - "responses": { - "200": { - "description": "Lead Source was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$subscription = $client->subscriptions()->load('subscriptionId');\n$leadSource = $subscription->getLeadSource();\n" - } - ] - }, - "put": { - "tags": [ - "Subscriptions" - ], - "summary": "Create a Lead Source for a Subscription", - "description": "Create a Lead Source for a Subscription\n", - "responses": { - "200": { - "description": "Lead Source was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "201": { - "description": "Lead Source was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$leadSourceForm = new Rebilly\\Entities\\LeadSource();\n$leadSourceForm->setSource('TestSource');\n$leadSourceForm->setCampaign('TestCampaign');\n\ntry {\n $subscription = $client->subscriptions()->updateLeadSource('subscriptionId', $leadSourceForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/LeadSource" - } - }, - "delete": { - "tags": [ - "Subscriptions" - ], - "summary": "Delete a Lead Source for a Subscription", - "description": "Delete a Lead Source that belongs to a certain Subscription\n", - "responses": { - "204": { - "description": "Lead Source was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Lead Source cannot be deleted" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$subscription = $client->subscriptions()->deleteLeadSource('subscriptionId');\n" - } - ] - } - }, - "/subscriptions/{id}/switch": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Subscriptions" - ], - "summary": "Switch a subscription", - "description": "Switch a subscription\n", - "responses": { - "201": { - "description": "Subscription was switched", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Subscription" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$subscriptionSwitchForm = new Rebilly\\Entities\\SubscriptionSwitch();\n$subscriptionSwitchForm->setPlanId('newPlanId');\n$subscriptionSwitchForm->setPolicy($subscriptionSwitchForm::NOW);\n\ntry {\n $subscription = $client->subscriptions()->switchTo('subscriptionId', $subscriptionSwitchForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SubscriptionSwitch" - } - } - }, - "description": "SubscriptionSwitch resource", - "required": true - } - } - }, - "/tax-categories": { - "get": { - "tags": [ - "Taxes" - ], - "summary": "Retrieve a list of tax categories", - "description": "Retrieve a list of tax categories\n", - "responses": { - "200": { - "description": "A list of tax categories was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TaxCategory" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - } - }, - "/tokens": { - "get": { - "tags": [ - "Payment Tokens" - ], - "summary": "Retrieve a list of tokens", - "description": "Retrieve a list of tokens\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of tokens was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PaymentToken" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentCardTokens = $client->paymentCardTokens()->search([\n 'filter' => 'token:string',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Payment Tokens" - ], - "summary": "Create a payment token", - "description": "Create a token\n", - "security": [ - { - "RebAuth": [] - } - ], - "responses": { - "201": { - "description": "Token was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentToken" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentCardTokenForm = new Rebilly\\Entities\\PaymentCardToken();\n$paymentCardTokenForm->setFirstName('John');\n$paymentCardTokenForm->setLastName('Doe');\n$paymentCardTokenForm->setAddress('1313 Main Street');\n$paymentCardTokenForm->setCity('Gotham');\n$paymentCardTokenForm->setPostalCode('12345');\n$paymentCardTokenForm->setRegion('NY');\n$paymentCardTokenForm->setCountry('US');\n\n$paymentInstrumentForm = new Entities\\PaymentInstruments\\PaymentCardPaymentInstrument();\n$paymentInstrumentForm->setPan('4111111111111111');\n$paymentInstrumentForm->setExpYear(2025);\n$paymentInstrumentForm->setExpMonth(8);\n$paymentInstrumentForm->setCvv(123);\n\n$paymentCardTokenForm->setPaymentInstrument($paymentInstrumentForm);\n\ntry {\n $paymentCardToken = $client->paymentCardTokens()->create($paymentCardTokenForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/PaymentToken" - } - } - }, - "/tokens/{token}": { - "parameters": [ - { - "name": "token", - "in": "path", - "description": "The token identifier string", - "required": true, - "schema": { - "type": "string" - } - } - ], - "get": { - "tags": [ - "Payment Tokens" - ], - "summary": "Retrieve a token", - "description": "Retrieve a token with specified identifier string\n", - "security": [ - { - "RebAuth": [] - } - ], - "responses": { - "200": { - "description": "Token was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentToken" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$paymentCardToken = $client->paymentCardTokens()->load('tokenId');\n" - } - ] - } - }, - "/tokens/{token}/expiration": { - "parameters": [ - { - "name": "token", - "in": "path", - "description": "The token identifier string", - "required": true, - "schema": { - "type": "string" - } - } - ], - "post": { - "tags": [ - "Payment Tokens" - ], - "summary": "Expire a token", - "description": "Expire a token\n", - "responses": { - "201": { - "description": "Token expiration successful", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentToken" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "try {\n $paymentCardToken = $client->paymentCardTokens()->expire('tokenId');\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/PaymentToken" - } - } - }, - "/tracking/api": { - "get": { - "tags": [ - "Tracking" - ], - "summary": "Retrieve a list of tracking API logs", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "name": "Accept", - "in": "header", - "description": "The response media type", - "schema": { - "type": "string", - "enum": [ - "application/json", - "text/csv" - ], - "default": "application/json" - } - } - ], - "responses": { - "200": { - "description": "Tracking API logs was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiTracking" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$apiTrackingLog = $client->apiTracking()->search([\n 'filter' => 'status:200',\n]);\n" - } - ] - } - }, - "/tracking/api/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Tracking" - ], - "summary": "Retrieve a tracking API log with specified identifier string", - "responses": { - "200": { - "description": "Tracking API log was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiTracking" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$apiTrackingLog = $client->apiTracking()->load('apiLogId');\n" - } - ] - } - }, - "/tracking/lists": { - "get": { - "tags": [ - "Tracking" - ], - "summary": "Retrieve Lists changes history", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "Lists changes history was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/List" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - } - }, - "/tracking/subscriptions": { - "get": { - "tags": [ - "Tracking" - ], - "summary": "Retrieve a list of tracking subscription logs", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "Tracking subscription logs was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SubscriptionTracking" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - } - }, - "/tracking/subscriptions/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Tracking" - ], - "summary": "Retrieve a tracking subscription log with specified identifier string", - "responses": { - "200": { - "description": "Tracking subscription log was retrieved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SubscriptionTracking" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/tracking/webhooks": { - "get": { - "tags": [ - "Tracking" - ], - "summary": "Retrieve a list of tracking webhook notifications", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "$ref": "#/components/parameters/collectionSort" - }, - { - "$ref": "#/components/parameters/collectionFilter" - }, - { - "$ref": "#/components/parameters/collectionCriteria" - } - ], - "responses": { - "200": { - "description": "Tracking webhook notifications was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookTracking" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - } - }, - "/tracking/webhooks/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Tracking" - ], - "summary": "Retrieve a tracking webhook notification with specified identifier string", - "responses": { - "200": { - "description": "Tracking webhook notification was retrieved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookTracking" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/tracking/website-webhooks": { - "get": { - "tags": [ - "Tracking" - ], - "summary": "Retrieve a list of tracking webhook notifications", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "Tracking webhook notifications was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebsiteWebhookTracking" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - } - }, - "/tracking/website-webhooks/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Tracking" - ], - "summary": "Retrieve a tracking webhook notification with specified identifier string", - "responses": { - "200": { - "description": "Tracking webhook notification was retrieved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebsiteWebhookTracking" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/transactions": { - "get": { - "tags": [ - "Transactions" - ], - "summary": "Retrieve a list of transactions", - "description": "Retrieve a list of transactions\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "$ref": "#/components/parameters/collectionFilter" - }, - { - "$ref": "#/components/parameters/collectionQuery" - }, - { - "$ref": "#/components/parameters/collectionCriteria" - }, - { - "$ref": "#/components/parameters/collectionSort" - }, - { - "name": "Accept", - "in": "header", - "description": "The response media type", - "schema": { - "type": "string", - "enum": [ - "application/json", - "text/csv" - ], - "default": "application/json" - } - } - ], - "responses": { - "200": { - "description": "A list of transactions was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Transaction" - } - } - }, - "text/csv": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Transaction" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$transactions = $client->transactions()->search([\n 'filter' => 'result:approved',\n]);\n" - } - ] - } - }, - "/transactions/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Transactions" - ], - "summary": "Retrieve a Transaction", - "description": "Retrieve a Transaction with specified identifier string\n", - "responses": { - "200": { - "description": "Transaction was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Transaction" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$transaction = $client->transactions()->load('transactionId');\n" - } - ] - } - }, - "/transactions/{id}/cancel": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Transactions" - ], - "summary": "Cancel a pending or suspended transaction", - "description": "Cancel a scheduled transaction. Once handled a transaction cannot be canceled", - "responses": { - "201": { - "description": "Successful cancel the payment", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Transaction" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "try {\n $payment = $client->transactions()->cancel('transactionId');\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ] - } - }, - "/transactions/{id}/gateway-logs": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Transactions" - ], - "summary": "Retrieve a Transaction Gateway Logs", - "description": "Retrieve Gateway communication Logs for Transaction with specified identifier string", - "responses": { - "200": { - "description": "Logs were retrieved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TransactionGatewayLog" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - } - }, - "/transactions/{id}/lead-source": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Transactions" - ], - "summary": "Retrieve a transaction's Lead Source", - "description": "Retrieve a Lead Source of given transaction\n", - "responses": { - "200": { - "description": "Lead Source was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$transaction = $client->transactions()->load('transactionId');\n$leadSource = $transaction->getLeadSource();\n" - } - ] - }, - "put": { - "tags": [ - "Transactions" - ], - "summary": "Create a Lead Source for a transaction", - "description": "Create a Lead Source for a transaction\n", - "responses": { - "200": { - "description": "Lead Source was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "201": { - "description": "Lead Source was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$leadSourceForm = new Rebilly\\Entities\\LeadSource();\n$leadSourceForm->setSource('TestSource');\n$leadSourceForm->setCampaign('TestCampaign');\n\ntry {\n $transaction = $client->transactions()->updateLeadSource('transactionId', $leadSourceForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/LeadSource" - } - }, - "delete": { - "tags": [ - "Transactions" - ], - "summary": "Delete a Lead Source for a transaction", - "description": "Delete a Lead Source that belongs to a certain transaction\n", - "responses": { - "204": { - "description": "Lead Source was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Lead Source cannot be deleted" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$payment = $client->transactions()->deleteLeadSource('transactionId');\n" - } - ] - } - }, - "/transactions/{id}/refund": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Transactions" - ], - "summary": "Refund a Transaction", - "description": "Refund a Transaction with specified identifier string.\nNote that the refund will be in the same currency as the original transaction.\n", - "responses": { - "201": { - "description": "Transaction was refunded successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Transaction" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$transaction = $client->transactions()->refund('transactionId', 1.99);\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TransactionRefund" - } - } - }, - "description": "Transaction resource", - "required": true - } - } - }, - "/users": { - "get": { - "tags": [ - "Users" - ], - "summary": "Retrieve a list of users", - "description": "Retrieve a list of users\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of users was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$users = $client->users()->search([\n 'filter' => 'firstName:John',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Users" - ], - "summary": "Create an user", - "description": "Create an user\n", - "responses": { - "201": { - "description": "User was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$userForm = new Rebilly\\Entities\\User();\n$userForm->setFirstName('John');\n$userForm->setLastName('Doe');\n$userForm->setEmail('johndoe@test.com');\n\ntry {\n $user = $client->users()->create($userForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/User" - } - } - }, - "/users/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Users" - ], - "summary": "Retrieve user", - "description": "Retrieve user with specified identifier string\n", - "responses": { - "200": { - "description": "User was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$user = $client->users()->load('userId');\n" - } - ] - }, - "put": { - "tags": [ - "Users" - ], - "summary": "Create or update user with predefined ID", - "description": "Create or update user with predefined identifier string\n", - "responses": { - "200": { - "description": "User was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "201": { - "description": "User was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$userForm = new Rebilly\\Entities\\User();\n$userForm->setFirstName('John');\n$userForm->setLastName('Doe');\n$userForm->setEmail('johndoe@test.com');\n\ntry {\n $user = $client->users()->update('userId', $userForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/User" - } - }, - "delete": { - "tags": [ - "Users" - ], - "summary": "Delete user", - "description": "Delete user with predefined identifier string\n", - "responses": { - "204": { - "description": "User was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "$ref": "#/components/responses/Conflict" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "try {\n $client->users()->delete('userId');\n} catch (ServerException $e) {\n echo $e->getMessage();\n}\n" - } - ] - } - }, - "/users/{id}/password": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Users" - ], - "summary": "Updates user's password with the specified newPassword", - "description": "Updates user's password with the specified newPassword. And checks if currentPassword matches the actual one.\n", - "responses": { - "201": { - "description": "Password updated successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "$ref": "#/components/responses/InvalidDataError" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$updatePasswordForm = new Rebilly\\Entities\\UpdatePassword();\n$updatePasswordForm->setCurrentPassword('1234');\n$updatePasswordForm->setNewPassword('5678');\n\ntry {\n $user = $client->users()->updatePassword('userId', $updatePasswordForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/UpdatePassword" - } - } - }, - "/users/{id}/totp-reset": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "post": { - "tags": [ - "Users" - ], - "summary": "Reset (renew) totpSecret", - "description": "Reset (renew) totpSecret\n", - "responses": { - "201": { - "description": "totpSecret reset (renewed) successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$user = $client->users()->resetTotp('userId');\n" - } - ] - } - }, - "/users/reset-password/{token}": { - "parameters": [ - { - "name": "token", - "in": "path", - "description": "The token string", - "required": true, - "schema": { - "type": "string" - } - } - ], - "post": { - "tags": [ - "Users" - ], - "summary": "Reset user password", - "description": "Reset user password\n", - "responses": { - "201": { - "description": "Password was reset successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$resetPasswordForm = new Rebilly\\Entities\\ResetPassword();\n$resetPasswordForm->setNewPassword('1234');\n\ntry {\n $user = $client->users()->resetPassword('userId', 'token', $resetPasswordForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResetPassword" - } - } - }, - "description": "ResetPassword resource", - "required": true - } - } - }, - "/webhooks": { - "get": { - "tags": [ - "Webhooks" - ], - "summary": "Retrieve a list of webhooks", - "description": "Retrieve a list of webhooks\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - } - ], - "responses": { - "200": { - "description": "A list of Webhooks was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GlobalWebhook" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - } - }, - "post": { - "tags": [ - "Webhooks" - ], - "summary": "Create a webhook", - "description": "Create a webhook\n", - "responses": { - "201": { - "description": "Webhook was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GlobalWebhook" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/GlobalWebhook" - } - } - }, - "/webhooks/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Webhooks" - ], - "summary": "Retrieve a webhook", - "description": "Retrieve a webhook with specified identifier string\n", - "responses": { - "200": { - "description": "Webhook was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GlobalWebhook" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - } - }, - "put": { - "tags": [ - "Webhooks" - ], - "summary": "Create or update a webhook with predefined ID", - "description": "Create or update a webhook with predefined identifier string\n", - "responses": { - "200": { - "description": "Webhook was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GlobalWebhook" - } - } - } - }, - "201": { - "description": "Webhook was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GlobalWebhook" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/GlobalWebhook" - } - } - }, - "/websites": { - "get": { - "tags": [ - "Websites" - ], - "summary": "Retrieve a list of websites", - "description": "Retrieve a list of websites\n", - "parameters": [ - { - "$ref": "#/components/parameters/collectionLimit" - }, - { - "$ref": "#/components/parameters/collectionOffset" - }, - { - "name": "Accept", - "in": "header", - "description": "The response media type", - "schema": { - "type": "string", - "enum": [ - "application/json", - "text/csv" - ], - "default": "application/json" - } - } - ], - "responses": { - "200": { - "description": "A list of Websites was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - }, - "Pagination-Total": { - "description": "Total items count", - "schema": { - "type": "integer" - } - }, - "Pagination-Limit": { - "description": "Items per page limit", - "schema": { - "type": "integer" - } - }, - "Pagination-Offset": { - "description": "Pagination offset", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Website" - } - } - }, - "text/csv": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Website" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$websites = $client->websites()->search([\n 'filter' => 'name:TestWebsite',\n]);\n" - } - ] - }, - "post": { - "tags": [ - "Websites" - ], - "summary": "Create a website", - "description": "Create a website\n", - "responses": { - "201": { - "description": "Website was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Website" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$websiteForm = new Rebilly\\Entities\\Website();\n$websiteForm->setName('TestWebsite');\n$websiteForm->setUrl('http://testwebsite.com');\n$websiteForm->setServicePhone('+0123456789');\n$websiteForm->setServiceEmail('test@testwebsite.com');\n\ntry {\n $website = $client->websites()->create($websiteForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Website" - } - } - }, - "/websites/{id}": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Websites" - ], - "summary": "Retrieve a website", - "description": "Retrieve a website with specified identifier string\n", - "responses": { - "200": { - "description": "Website was retrieved successfully", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Website" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$website = $client->websites()->load('websiteId');\n" - } - ] - }, - "put": { - "tags": [ - "Websites" - ], - "summary": "Create or update a website with predefined ID", - "description": "Create or update a website with predefined identifier string\n", - "responses": { - "200": { - "description": "Website was updated", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Website" - } - } - } - }, - "201": { - "description": "Website was created", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Website" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$websiteForm = new Rebilly\\Entities\\Website();\n$websiteForm->setName('TestWebsite');\n$websiteForm->setUrl('http://testwebsite.com');\n$websiteForm->setServicePhone('+0123456789');\n$websiteForm->setServiceEmail('test@testwebsite.com');\n\ntry {\n $website = $client->websites()->update('websiteId', $websiteForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/Website" - } - }, - "delete": { - "tags": [ - "Websites" - ], - "summary": "Delete a website", - "description": "Delete a website with predefined identifier string\n", - "responses": { - "204": { - "description": "Website was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "description": "Website has related resources and cannot be deleted" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "try {\n $client->websites()->delete('websiteId');\n} catch (ServerException $e) {\n echo $e->getMessage();\n}\n" - } - ] - } - }, - "/websites/{id}/webhook": { - "parameters": [ - { - "$ref": "#/components/parameters/resourceId" - } - ], - "get": { - "tags": [ - "Websites" - ], - "summary": "Retrieve a webhook for website", - "description": "Retrieve a webhook for website with specified identifier string\n", - "responses": { - "200": { - "description": "Webhook was retrieved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebsiteWebhook" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$websiteWebhook = $client->websiteWebhook()->load('websiteId');\n" - } - ] - }, - "put": { - "tags": [ - "Websites" - ], - "summary": "Create or update a webhook for website with predefined ID", - "description": "Create or update a webhook for website with predefined identifier string\n", - "responses": { - "200": { - "description": "Webhook was updated", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebsiteWebhook" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "422": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$websiteWebhookForm = new Rebilly\\Entities\\WebsiteWebhook();\n$websiteWebhookForm->setWebHookUrl('http://testwebsite.com/webhook');\n$websiteWebhookForm->setWebHookUsername('test');\n$websiteWebhookForm->setWebHookPassword('1234');\n\ntry {\n $website = $client->websiteWebhook()->update('websiteId', $websiteWebhookForm);\n} catch (UnprocessableEntityException $e) {\n echo $e->getMessage();\n}\n" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebsiteWebhook" - } - } - }, - "description": "Webhook resource", - "required": true - } - }, - "delete": { - "tags": [ - "Websites" - ], - "summary": "Delete a webhook", - "description": "Delete a webhook that belongs to a website with predefined ID\n", - "responses": { - "204": { - "description": "Webhook was deleted", - "headers": { - "Rate-Limit-Limit": { - "description": "The number of allowed requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Remaining": { - "description": "The number of remaining requests in the current period", - "schema": { - "type": "integer" - } - }, - "Rate-Limit-Reset": { - "description": "The date in format defined by [RFC 822](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)\nwhen the current period will reset\n", - "schema": { - "type": "string" - } - } - } - }, - "401": { - "$ref": "#/components/responses/AccessForbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - } - }, - "x-code-samples": [ - { - "lang": "PHP", - "source": "$client->websiteWebhook()->delete('websiteId');\n" - } - ] - } - } - }, - "components": { - "schemas": { - "ApiKey": { - "type": "object", - "description": "API secret Key.", - "properties": { - "id": { - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "description": { - "description": "API key description", - "type": "string" - }, - "datetimeFormat": { - "description": "Date time format", - "type": "string", - "default": "iso8601", - "enum": [ - "mysql", - "iso8601" - ] - }, - "apiUser": { - "description": "API user name", - "type": "string", - "readOnly": true - }, - "secretKey": { - "description": "API secret key's value", - "type": "string", - "readOnly": true - }, - "createdTime": { - "description": "The API key created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "Attachment": { - "type": "object", - "required": [ - "fileId", - "relatedId", - "relatedType" - ], - "properties": { - "id": { - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "fileId": { - "description": "Linked File object id", - "type": "string" - }, - "relatedType": { - "description": "Linked object type", - "type": "string", - "enum": [ - "customer", - "dispute", - "invoice", - "note", - "payment", - "plan", - "product", - "subscription", - "transaction" - ] - }, - "relatedId": { - "description": "Linked object Id", - "type": "string" - }, - "name": { - "description": "The Original Attachment name", - "type": "string" - }, - "description": { - "description": "The Attachment description", - "type": "string" - }, - "createdTime": { - "description": "Creation date/time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Latest update date/time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 3, - "maxItems": 3, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/FileLink" - }, - { - "$ref": "#/components/schemas/AttachmentResourceLink" - } - ] - } - } - } - }, - "AuthenticationOptions": { - "type": "object", - "properties": { - "passwordPattern": { - "description": "Allowed password pattern", - "type": "string" - }, - "credentialTtl": { - "description": "The default lifetime of the credential in seconds", - "type": "integer" - }, - "authTokenTtl": { - "description": "The default lifetime of the auth-token in seconds", - "type": "integer" - }, - "resetTokenTtl": { - "description": "The default lifetime of the reset-token in seconds", - "type": "integer" - } - } - }, - "AuthenticationToken": { - "type": "object", - "required": [ - "username", - "password" - ], - "properties": { - "token": { - "description": "The token identifier string", - "type": "string", - "readOnly": true - }, - "username": { - "description": "The token's username", - "type": "string" - }, - "password": { - "description": "The token's password (write-only)", - "type": "string", - "format": "password" - }, - "credentialId": { - "description": "The credential's ID", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "The token's customer ID", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "expiredTime": { - "description": "Token's expired time", - "type": "string", - "format": "date-time" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "BankAccount": { - "type": "object", - "properties": { - "id": { - "description": "The bank account identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "The Customer's ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "bankName": { - "description": "Bank's name.", - "type": "string" - }, - "routingNumber": { - "description": "Bank's Routing Number. Required if bank account is not created from Token. This field is write-only", - "type": "string" - }, - "accountNumber": { - "description": "Bank's Account Number. Required if bank account is not created from Token. This field is write-only", - "type": "string" - }, - "accountType": { - "description": "Banks's Account type. Required if bank account is not created from Token", - "type": "string" - }, - "token": { - "description": "Bank Account Token. Use without any other fields", - "type": "string" - }, - "address": { - "description": "The Address. Required if bank account is not created from Token", - "allOf": [ - { - "$ref": "#/components/schemas/ContactObject" - } - ] - }, - "status": { - "description": "Bank Account status", - "type": "string", - "enum": [ - "active", - "deactivated" - ] - }, - "createdTime": { - "description": "Bank Account created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Bank Account updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 3, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/CustomerLink" - }, - { - "$ref": "#/components/schemas/ContactLink" - } - ] - } - } - } - }, - "Blacklist": { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "id": { - "description": "The blacklist identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "type": { - "description": "The blacklist type", - "type": "string", - "enum": [ - "payment-card-id", - "customer-id", - "email", - "ip-address", - "country", - "fingerprint", - "bin" - ] - }, - "value": { - "description": "The blacklist value", - "type": "string" - }, - "expiredTime": { - "description": "The blacklist expired time", - "type": "string", - "format": "date-time" - }, - "createdTime": { - "description": "The blacklist created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "The blacklist updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "CheckoutPage": { - "type": "object", - "required": [ - "name", - "planId", - "websiteId", - "uriPath" - ], - "properties": { - "id": { - "description": "Checkout page identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "planId": { - "description": "Checkout page plan ID", - "type": "string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "websiteId": { - "description": "Checkout page website ID", - "type": "string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "uriPath": { - "description": "Your own custom uri path for this Checkout Page. It will be appended to checkout url https://checkout.rebilly.com/website/", - "type": "string" - }, - "name": { - "description": "Checkout page name", - "type": "string" - }, - "isActive": { - "description": "If checkout page active", - "type": "boolean" - }, - "redirectUrl": { - "description": "Checkout page url", - "type": "string" - }, - "redirectTimeout": { - "description": "Checkout page redirect timeout", - "type": "integer" - }, - "allowCustomCustomerId": { - "description": "If to enable your own customer ID in requests", - "type": "boolean" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "none": { - "allOf": [ - { - "$ref": "#/components/schemas/AmountAdjustment" - }, - { - "$ref": "#/components/schemas/SmtpAuthorization" - }, - { - "$ref": "#/components/schemas/WebhookAuthorization" - } - ] - }, - "Contact": { - "type": "object", - "properties": { - "id": { - "description": "The contact identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "The contact customer ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "firstName": { - "description": "The contact first name", - "type": "string" - }, - "lastName": { - "description": "The contact last name", - "type": "string" - }, - "organization": { - "description": "The contact organization", - "type": "string" - }, - "address": { - "description": "The contact street address", - "type": "string", - "maxLength": 60 - }, - "address2": { - "description": "The contact street address (second line)", - "type": "string", - "maxLength": 60 - }, - "city": { - "description": "The contact city", - "type": "string", - "maxLength": 45 - }, - "region": { - "description": "The contact region (state)", - "type": "string", - "maxLength": 45 - }, - "country": { - "description": "The contact country ISO Alpha-2 code", - "type": "string", - "pattern": "^[A-Z]{2}$" - }, - "postalCode": { - "description": "The contact postal code", - "type": "string", - "maxLength": 10 - }, - "phoneNumbers": { - "$ref": "#/components/schemas/ContactPhoneNumbers" - }, - "emails": { - "$ref": "#/components/schemas/ContactEmails" - }, - "isOutdated": { - "description": "Is contact outdated", - "type": "boolean", - "readOnly": true - }, - "createdTime": { - "description": "The contact created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "The contact updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 2, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/CustomerLink" - } - ] - } - } - } - }, - "ContactEmails": { - "description": "The contact emails", - "type": "array", - "items": { - "type": "object", - "required": [ - "label", - "value" - ], - "properties": { - "label": { - "description": "The email label", - "type": "string" - }, - "value": { - "description": "The email value", - "type": "string" - }, - "primary": { - "description": "True if email is primary", - "type": "boolean" - } - } - } - }, - "ContactObject": { - "type": "object", - "properties": { - "firstName": { - "description": "The contact first name", - "type": "string" - }, - "lastName": { - "description": "The contact last name", - "type": "string" - }, - "organization": { - "description": "The contact organization", - "type": "string" - }, - "address": { - "description": "The contact street address", - "type": "string", - "maxLength": 60 - }, - "address2": { - "description": "The contact street address (second line)", - "type": "string", - "maxLength": 60 - }, - "city": { - "description": "The contact city", - "type": "string", - "maxLength": 45 - }, - "region": { - "description": "The contact region (state)", - "type": "string", - "maxLength": 45 - }, - "country": { - "description": "The contact country ISO Alpha-2 code", - "type": "string", - "pattern": "^[A-Z]{2}$" - }, - "postalCode": { - "description": "The contact postal code", - "type": "string", - "maxLength": 10 - }, - "phoneNumbers": { - "$ref": "#/components/schemas/ContactPhoneNumbers" - }, - "emails": { - "$ref": "#/components/schemas/ContactEmails" - } - } - }, - "ContactPhoneNumbers": { - "description": "The contact phone numbers", - "type": "array", - "items": { - "type": "object", - "required": [ - "label", - "value" - ], - "properties": { - "label": { - "description": "The phone label", - "type": "string" - }, - "value": { - "description": "The phone value", - "type": "string" - }, - "primary": { - "description": "True if phone is primary", - "type": "boolean" - } - } - } - }, - "Coupon": { - "type": "object", - "description": "Coupons and Discounts", - "required": [ - "discount", - "issuedTime" - ], - "properties": { - "redemptionCode": { - "description": "Coupon's redemption code", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "discount": { - "$ref": "#/components/schemas/Discount" - }, - "restrictions": { - "description": "Coupon restrictions", - "type": "array", - "items": { - "$ref": "#/components/schemas/CouponRestriction" - } - }, - "redemptionsCount": { - "type": "integer", - "description": "Coupon's redemptions count", - "minimum": 0, - "readOnly": true - }, - "status": { - "type": "string", - "description": "If coupon enabled", - "readOnly": true, - "enum": [ - "issued", - "expired" - ] - }, - "description": { - "type": "string", - "description": "Your coupon description. When it is not empty this is used for invoice discount item description,\notherwise the item's description uses coupon's redemptionCode like 'Coupon \"redemptionCode\"'\n" - }, - "issuedTime": { - "description": "Coupon's issued time (start time)", - "type": "string", - "format": "date-time" - }, - "expiredTime": { - "description": "Coupon's expire time (end time)", - "type": "string", - "format": "date-time" - }, - "createdTime": { - "description": "Coupon created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Coupon updated time.", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "CouponExpiration": { - "type": "object", - "required": [ - "expiredTime" - ], - "properties": { - "expiredTime": { - "description": "The coupon's expiry time, must be greater than the issued time. Null or empty string will immediately expire the coupon.", - "type": "string", - "format": "date-time" - } - } - }, - "CouponRedemption": { - "type": "object", - "description": "Coupons redemption log", - "properties": { - "id": { - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "redemptionCode": { - "description": "Coupon's redemption code", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "Customer's ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "additionalRestrictions": { - "description": "Additional restrictions for coupon's redemptions", - "type": "array", - "items": { - "$ref": "#/components/schemas/RedemptionRestriction" - } - }, - "redeemedTime": { - "description": "Coupon redeem time", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "canceledTime": { - "description": "Coupon redemption canceled time", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "CouponRestriction": { - "description": "Coupon restrictions", - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/GenericRestriction" - }, - { - "type": "object", - "properties": { - "type": { - "description": "Coupon's restriction type", - "type": "string", - "enum": [ - "discounts-per-redemption", - "redemptions-per-customer", - "restrict-to-invoices", - "restrict-to-plans", - "restrict-to-subscriptions", - "minimum-order-amount", - "total-redemptions" - ] - } - } - } - ] - }, - "Discount": { - "type": "object", - "discriminator": { - "propertyName": "type" - }, - "properties": { - "type": { - "description": "Discount type", - "type": "string", - "enum": [ - "fixed", - "percent" - ] - } - } - }, - "discounts-per-redemption": { - "description": "discounts-per-redemption restrictions", - "allOf": [ - { - "$ref": "#/components/schemas/GenericRestriction" - }, - { - "type": "object", - "required": [ - "quantity" - ], - "properties": { - "quantity": { - "type": "integer", - "description": "Restriction quantity" - } - } - } - ] - }, - "fixed": { - "description": "Coupon fixed amount discount", - "allOf": [ - { - "$ref": "#/components/schemas/Discount" - }, - { - "type": "object", - "required": [ - "amount", - "currency" - ], - "properties": { - "amount": { - "description": "Discount amount", - "type": "number", - "format": "double" - }, - "currency": { - "description": "Discount currency", - "type": "string" - } - } - } - ] - }, - "GenericRestriction": { - "description": "All restriction", - "type": "object", - "discriminator": { - "propertyName": "type" - }, - "properties": { - "type": { - "description": "Restriction type", - "type": "string" - } - } - }, - "InvoiceDiscount": { - "type": "object", - "readOnly": true, - "properties": { - "redemptionCode": { - "description": "Coupon's redemption code", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "redemptionId": { - "description": "Redemption ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "amount": { - "description": "Total amount that was discounted by this Coupon", - "type": "number", - "format": "double" - }, - "description": { - "type": "string", - "description": "Discount description" - } - } - }, - "minimum-order-amount": { - "description": "minimum-order-amount restrictions", - "allOf": [ - { - "$ref": "#/components/schemas/GenericRestriction" - }, - { - "type": "object", - "required": [ - "amount", - "currency" - ], - "properties": { - "amount": { - "type": "integer", - "description": "Minimum order quantity" - }, - "currency": { - "type": "string", - "description": "Minimum order currency" - } - } - } - ] - }, - "percent": { - "description": "Coupon percent discount", - "allOf": [ - { - "$ref": "#/components/schemas/Discount" - }, - { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "description": "Discount percent", - "type": "number", - "format": "double" - } - } - } - ] - }, - "RedemptionRestriction": { - "description": "Redemption restrictions", - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/GenericRestriction" - }, - { - "type": "object", - "properties": { - "type": { - "description": "Redemption's additional restriction type", - "type": "string", - "enum": [ - "discounts-per-redemption", - "restrict-to-invoices", - "restrict-to-plans", - "restrict-to-subscriptions", - "minimum-order-amount" - ] - } - } - } - ] - }, - "redemptions-per-customer": { - "description": "Quantity per Customer restrictions", - "allOf": [ - { - "$ref": "#/components/schemas/GenericRestriction" - }, - { - "type": "object", - "required": [ - "quantity" - ], - "properties": { - "quantity": { - "type": "integer", - "description": "Restriction value" - } - } - } - ] - }, - "restrict-to-invoices": { - "description": "restrict-to-invoices restrictions", - "allOf": [ - { - "$ref": "#/components/schemas/GenericRestriction" - }, - { - "type": "object", - "required": [ - "invoiceIds" - ], - "properties": { - "invoiceIds": { - "type": "array", - "description": "Invoice IDs coupon can be applied to", - "items": { - "type": "string" - } - } - } - } - ] - }, - "restrict-to-plans": { - "description": "restrict-to-plans restrictions", - "allOf": [ - { - "$ref": "#/components/schemas/GenericRestriction" - }, - { - "type": "object", - "required": [ - "planIds" - ], - "properties": { - "planIds": { - "type": "array", - "description": "Plan IDs coupon can be applied to", - "items": { - "type": "string" - } - } - } - } - ] - }, - "restrict-to-subscriptions": { - "description": "restrict-to-subscriptions restrictions", - "allOf": [ - { - "$ref": "#/components/schemas/GenericRestriction" - }, - { - "type": "object", - "required": [ - "subscriptionIds" - ], - "properties": { - "subscriptionIds": { - "type": "array", - "description": "Subscription IDs coupon can be applied to", - "items": { - "type": "string" - } - } - } - } - ] - }, - "total-redemptions": { - "description": "total-redemptions restrictions", - "allOf": [ - { - "$ref": "#/components/schemas/GenericRestriction" - }, - { - "type": "object", - "required": [ - "quantity" - ], - "properties": { - "quantity": { - "type": "integer", - "description": "Total redemptions quantity" - } - } - } - ] - }, - "Credential": { - "type": "object", - "required": [ - "username", - "password", - "customerId" - ], - "properties": { - "id": { - "description": "The credential identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "username": { - "description": "Credential's username", - "type": "string" - }, - "password": { - "description": "The credential's password", - "type": "string", - "format": "password" - }, - "customerId": { - "description": "The credential's customer ID", - "type": "string" - }, - "expiredTime": { - "description": "The credential's expired time", - "type": "string", - "format": "date-time" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 2, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/CustomerLink" - } - ] - } - } - } - }, - "Condition": { - "type": "object", - "discriminator": { - "propertyName": "op" - }, - "properties": { - "op": { - "type": "string", - "description": "The condition operation", - "enum": [ - "and", - "or", - "not", - "between", - "equals", - "in", - "gt", - "gte", - "lt", - "lte" - ] - } - }, - "required": [ - "op" - ] - }, - "and": { - "type": "object", - "description": "Logical AND", - "allOf": [ - { - "$ref": "#/components/schemas/Condition" - }, - { - "$ref": "#/components/schemas/logical" - } - ] - }, - "between": { - "type": "object", - "description": "Between condition", - "allOf": [ - { - "$ref": "#/components/schemas/Condition" - }, - { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "min": { - "type": "string" - }, - "max": { - "type": "string" - } - }, - "required": [ - "path", - "min", - "max" - ] - } - ] - }, - "compare": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": [ - "path", - "value" - ] - }, - "equals": { - "type": "object", - "description": "Equals condition", - "allOf": [ - { - "$ref": "#/components/schemas/Condition" - }, - { - "$ref": "#/components/schemas/compare" - } - ] - }, - "gt": { - "type": "object", - "description": "Greater than condition", - "allOf": [ - { - "$ref": "#/components/schemas/Condition" - }, - { - "$ref": "#/components/schemas/compare" - } - ] - }, - "gte": { - "type": "object", - "description": "Greater than or equals condition", - "allOf": [ - { - "$ref": "#/components/schemas/Condition" - }, - { - "$ref": "#/components/schemas/compare" - } - ] - }, - "in": { - "type": "object", - "description": "In condition", - "allOf": [ - { - "$ref": "#/components/schemas/Condition" - }, - { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "values": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "path", - "values" - ] - } - ] - }, - "logical-not": { - "type": "object", - "properties": { - "condition": { - "$ref": "#/components/schemas/Condition" - } - }, - "required": [ - "condition" - ], - "example": { - "operation": "not", - "condition": { - "operation": "equals", - "path": "/name", - "value": "John Dou" - } - } - }, - "logical": { - "type": "object", - "properties": { - "conditions": { - "type": "array", - "minItems": 2, - "items": { - "$ref": "#/components/schemas/Condition" - } - } - }, - "required": [ - "conditions" - ] - }, - "lt": { - "type": "object", - "description": "Less than condition", - "allOf": [ - { - "$ref": "#/components/schemas/Condition" - }, - { - "$ref": "#/components/schemas/compare" - } - ] - }, - "lte": { - "type": "object", - "description": "Less than or equals condition", - "allOf": [ - { - "$ref": "#/components/schemas/Condition" - }, - { - "$ref": "#/components/schemas/compare" - } - ] - }, - "not": { - "type": "object", - "description": "Logical NOT", - "allOf": [ - { - "$ref": "#/components/schemas/Condition" - }, - { - "$ref": "#/components/schemas/logical-not" - } - ] - }, - "or": { - "type": "object", - "description": "Logical OR", - "allOf": [ - { - "$ref": "#/components/schemas/Condition" - }, - { - "$ref": "#/components/schemas/logical" - } - ] - }, - "Customer": { - "type": "object", - "properties": { - "id": { - "description": "The customer identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "defaultPaymentInstrument": { - "$ref": "#/components/schemas/PaymentInstrument" - }, - "createdTime": { - "description": "The customer created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "The customer updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "primaryAddress": { - "$ref": "#/components/schemas/ContactObject" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 3, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/NotesLink" - }, - { - "$ref": "#/components/schemas/DefaultPaymentInstrumentLink" - }, - { - "$ref": "#/components/schemas/LeadSourceLink" - } - ] - } - } - } - }, - "CustomEvent": { - "type": "object", - "properties": { - "id": { - "description": "The custom event identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "eventType": { - "type": "string", - "description": "The system event type", - "enum": [ - "subscription-ended", - "subscription-trial-ended", - "subscription-renewed", - "payment-card-expired", - "invoice-past-due", - "invoice-issued", - "invoice-voided", - "invoice-paid", - "invoice-abandoned" - ] - }, - "title": { - "type": "string", - "description": "The custom event title" - }, - "description": { - "type": "string", - "description": "The custom event description" - }, - "chronology": { - "type": "string", - "description": "The emitting time of the custom event relatively to the system event", - "enum": [ - "before", - "after" - ] - }, - "scheduleInstruction": { - "$ref": "#/components/schemas/CustomEventScheduleInstruction" - }, - "createdTime": { - "$ref": "#/components/schemas/ServerTimestamp" - }, - "rulesCount": { - "type": "integer", - "readOnly": true - } - }, - "required": [ - "eventType", - "title", - "chronology", - "scheduleInstruction" - ] - }, - "CustomField": { - "description": "A separate Custom Field schema", - "type": "object", - "required": [ - "name", - "type" - ], - "properties": { - "name": { - "description": "The name of the custom field", - "type": "string" - }, - "type": { - "description": "Type value | Description\n------------- | -------------\narray | An array of strings up to 255 characters, maximum size is 1000 elements\nboolean | true or false\ndate | String of format \"full-date\" (YYYY-MM-DD) from RFC-3339 (full-date)\ndatetime | String of format \"date-time\" (YYYY-MM-DDTHH:MM:SSZ) from RFC-3339 (date-time)\ninteger | Cardinal value of -2^31..2^31-1\nnumber | Float value. It can take cardinal values also which are interpreted as float\nstring | Regular string up to 255 characters\nmonetary | A map of 3-letters currency code and amount, e.g. {\"currency\": \"EUR\", \"amount\": 25.30}\n", - "type": "string", - "enum": [ - "array", - "boolean", - "datetime", - "integer", - "number", - "string", - "monetary" - ] - }, - "description": { - "description": "The custom field description", - "type": "string" - }, - "isUsed": { - "description": "A flag to represent that the custom field is used on a record of the resource.", - "type": "boolean" - }, - "additionalSchema": { - "description": "Additional parameters which can be added according to type:\nParameter Name | Types | Description\n-------------- | ------------- | -------------\nallowedValues | string, array | List of allowed values\n" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "Dispute": { - "type": "object", - "required": [ - "currency", - "transactionId", - "postedTime", - "type", - "status", - "reasonCode" - ], - "properties": { - "id": { - "description": "The dispute identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "The dispute's customer ID", - "type": "string", - "readOnly": true - }, - "transactionId": { - "description": "The dispute's transaction ID", - "type": "string" - }, - "currency": { - "description": "The dispute currency ISO Alpha code", - "type": "string" - }, - "amount": { - "description": "The dispute amount", - "type": "number", - "format": "double" - }, - "acquirerReferenceNumber": { - "description": "The dispute's acquirer reference number", - "type": "string" - }, - "reasonCode": { - "description": "The dispute's reason code", - "type": "string", - "enum": [ - "1000", - "12", - "2", - "30", - "31", - "35", - "37", - "40", - "41", - "42", - "46", - "47", - "49", - "50", - "53", - "54", - "55", - "57", - "59", - "60", - "62", - "7", - "70", - "71", - "72", - "73", - "74", - "75", - "76", - "77", - "79", - "8", - "80", - "81", - "82", - "83", - "85", - "86", - "93", - "00", - "63", - "A01", - "A02", - "A08", - "F10", - "F14", - "F22", - "F24", - "F29", - "C02", - "C04", - "C05", - "C08", - "C14", - "C18", - "C28", - "C31", - "C32", - "M10", - "M49", - "P01", - "P03", - "P04", - "P05", - "P07", - "P08", - "P22", - "P23", - "R03", - "R13", - "M01", - "FR1", - "FR4", - "FR6", - "AL", - "AP", - "AW", - "CA", - "CD", - "CR", - "DA", - "DP", - "DP1", - "EX", - "IC", - "IN", - "IS", - "LP", - "N", - "NA", - "NC", - "P", - "RG", - "RM", - "RN1", - "RN2", - "SV", - "TF", - "TNM", - "UA01", - "UA02", - "UA32", - "UA99", - "UA03", - "UA10", - "UA11", - "UA12", - "UA18", - "UA20", - "UA21", - "UA22", - "UA23", - "UA28", - "UA30", - "UA31", - "UA38", - "duplicate", - "fraudulent", - "subscription_canceled", - "product_unacceptable", - "product_not_received", - "unrecognized", - "credit_not_processed", - "customer_initiated", - "incorrect_account_details", - "insufficient_funds", - "bank_cannot_process", - "debit_not_authorized", - "general" - ] - }, - "category": { - "description": "The dispute's category", - "type": "string", - "readOnly": true, - "enum": [ - "fraud", - "unrecognized", - "product-not-received", - "product-unacceptable", - "product-not-refunded", - "duplicate", - "subscription-canceled", - "uncategorized" - ] - }, - "type": { - "description": "The dispute's type", - "type": "string", - "enum": [ - "information-request", - "first-chargeback", - "second-chargeback", - "arbitration" - ] - }, - "status": { - "description": "The dispute's status", - "type": "string", - "enum": [ - "response-needed", - "under-review", - "forfeited", - "won", - "lost", - "unknown" - ] - }, - "postedTime": { - "description": "Dispute posted time", - "type": "string", - "format": "date-time" - }, - "deadlineTime": { - "description": "Dispute deadline time", - "type": "string", - "format": "date-time" - }, - "rawResponse": { - "description": "Dispute raw response from gateway", - "type": "string", - "readOnly": true - }, - "resolvedTime": { - "description": "Dispute resolved time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "createdTime": { - "description": "Dispute created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Dispute updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "DisputeEvidence": { - "type": "object", - "properties": { - "policy": { - "description": "The id of a file upload with the policy materials (may include the cancellation policy, refund policy, and terms of use).", - "type": "string" - }, - "accessLogs": { - "description": "The id of a file upload with the access logs showing the customer activity.", - "type": "string" - }, - "customerCommunication": { - "description": "The id of a file upload showing communication with the customer (for example emails).", - "type": "string" - }, - "customerSignature": { - "description": "The id of a file upload showing the signed contract or signed delivery receipt.", - "type": "string" - }, - "deliveryProof": { - "description": "The id of a file upload showing the proof of delivery.", - "type": "string" - }, - "explanation": { - "description": "An explanation relevant to the category of dispute.", - "type": "string" - }, - "additionalFile": { - "description": "Any additional evidence as a file upload id.", - "type": "string" - } - } - }, - "Email": { - "type": "object", - "required": [ - "email" - ], - "properties": { - "email": { - "description": "Email", - "type": "string", - "format": "email" - } - } - }, - "SmtpAuthorization": { - "type": "object", - "discriminator": { - "propertyName": "type" - }, - "properties": { - "type": { - "type": "string", - "enum": [ - "none", - "plain", - "login", - "cram-md5" - ], - "default": "none" - } - } - }, - "cram-md5": { - "allOf": [ - { - "$ref": "#/components/schemas/SmtpAuthorization" - }, - { - "$ref": "#/components/schemas/UserPasswordAuthorization" - } - ] - }, - "login": { - "allOf": [ - { - "$ref": "#/components/schemas/SmtpAuthorization" - }, - { - "$ref": "#/components/schemas/UserPasswordAuthorization" - } - ] - }, - "plain": { - "allOf": [ - { - "$ref": "#/components/schemas/SmtpAuthorization" - }, - { - "$ref": "#/components/schemas/UserPasswordAuthorization" - } - ] - }, - "SmtpCredential": { - "type": "object", - "description": "SMTP Credential", - "required": [ - "host" - ], - "properties": { - "hash": { - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "host": { - "type": "string", - "description": "The host name" - }, - "port": { - "type": "integer", - "description": "The port value", - "minimum": 1, - "maximum": 65535, - "default": 25 - }, - "encryption": { - "type": "string", - "description": "The encryption value", - "enum": [ - "none", - "tls", - "ssl" - ], - "default": "none" - }, - "auth": { - "$ref": "#/components/schemas/SmtpAuthorization" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "UserPasswordAuthorization": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "password": { - "type": "string", - "format": "password" - } - }, - "required": [ - "username", - "password" - ] - }, - "Error": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "minimum": 100, - "maximum": 600 - }, - "error": { - "type": "string" - } - } - }, - "SystemEvent": { - "type": "object", - "description": "The application event", - "readOnly": true, - "properties": { - "eventType": { - "$ref": "#/components/schemas/EventType" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "rulesCount": { - "type": "integer", - "readOnly": true - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "EventType": { - "type": "string", - "description": "Rebilly event type", - "readOnly": true, - "enum": [ - "dispute-created", - "gateway-account-requested", - "transaction-processed", - "subscription-canceled", - "subscription-created", - "subscription-renewed", - "payment-card-expired", - "payment-declined", - "transaction-process-requested", - "risk-score-changed" - ] - }, - "File": { - "type": "object", - "properties": { - "id": { - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "name": { - "description": "Original File name", - "type": "string" - }, - "extension": { - "description": "The File extension", - "type": "string" - }, - "description": { - "description": "The File description", - "type": "string" - }, - "url": { - "description": "Write-only. If defined on POST, this would be used as a file source.", - "type": "string" - }, - "tags": { - "description": "The tags list", - "type": "array", - "items": { - "type": "string" - } - }, - "mime": { - "description": "The mime type", - "type": "string", - "readOnly": true, - "enum": [ - "image/png", - "image/jpeg", - "image/gif", - "application/pdf", - "audio/mpeg" - ] - }, - "size": { - "description": "The File size in bytes", - "type": "integer", - "readOnly": true - }, - "width": { - "description": "Image width, applicable to images only", - "type": "integer", - "readOnly": true - }, - "height": { - "description": "Image height, applicable to images only", - "type": "integer", - "readOnly": true - }, - "sha1": { - "description": "Hash sum of the file", - "type": "string", - "readOnly": true - }, - "createdTime": { - "description": "The upload date/time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "The latest update date/time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 2, - "maxItems": 2, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/PermalinkLink" - } - ] - } - } - } - }, - "GatewayAccount": { - "type": "object", - "required": [ - "gatewayName", - "acquirerName", - "merchantCategoryCode", - "websites", - "acceptedCurrencies", - "organizationId" - ], - "discriminator": { - "propertyName": "gatewayName" - }, - "properties": { - "id": { - "description": "The gateway identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "status": { - "description": "The gateway account's status", - "readOnly": true, - "type": "string", - "enum": [ - "active", - "inactive", - "pending" - ] - }, - "gatewayName": { - "$ref": "#/components/schemas/GatewayName" - }, - "acquirerName": { - "$ref": "#/components/schemas/AcquirerName" - }, - "merchantCategoryCode": { - "description": "The gateway account's merchant category code", - "type": "integer", - "minimum": 742, - "maximum": 9950 - }, - "dccMarkup": { - "description": "Dynamic currency conversion markup in basis points", - "type": "integer", - "minimum": 1, - "maximum": 10000 - }, - "descriptor": { - "description": "The gateway account's descriptor", - "type": "string" - }, - "cityField": { - "description": "The gateway account's city field (also known as line 2 descriptor)", - "type": "string" - }, - "organizationId": { - "description": "Organization ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "websites": { - "description": "Websites IDs", - "type": "array", - "items": { - "description": "Website ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - } - }, - "excludedDccQuoteCurrencies": { - "description": "Excluded Dynamic Currency Conversion Quote Currencies", - "type": "array", - "items": { - "type": "string" - } - }, - "monthlyLimit": { - "description": "Monthly Limit", - "type": "integer", - "format": "double", - "minimum": 0 - }, - "threeDSecure": { - "description": "True, if Gateway Account allows 3DSecure", - "type": "boolean" - }, - "dynamicDescriptor": { - "description": "True, if Gateway Account allows dynamic descriptor", - "type": "boolean" - }, - "acceptedCurrencies": { - "description": "Accepted currencies (array of the currency three letter code)", - "type": "array", - "items": { - "type": "string" - } - }, - "method": { - "$ref": "#/components/schemas/Method" - }, - "paymentCardSchemes": { - "description": "Accepted payment card brands", - "type": "array", - "items": { - "type": "string", - "enum": [ - "Visa", - "MasterCard", - "American Express", - "Discover", - "Maestro", - "Solo", - "Electron", - "JCB", - "Voyager", - "Diners Club", - "Switch", - "Laser", - "China Unionpay" - ] - } - }, - "downtimeStart": { - "description": "Gateway account downtime start", - "type": "string", - "format": "date-time" - }, - "downtimeEnd": { - "description": "Gateway account downtime end", - "type": "string", - "format": "date-time" - }, - "createdTime": { - "description": "Gateway Account created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Gateway Account updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 2, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/OnBoardingUrlLink" - } - ] - } - } - } - }, - "A1Gateway": { - "description": "A1Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "description": "A1Gateway credentials object", - "properties": { - "accountId": { - "type": "string", - "description": "A1Gateway account ID" - }, - "password": { - "type": "string", - "description": "A1Gateway password", - "format": "password" - } - }, - "required": [ - "accountId", - "password" - ] - }, - "mpi": { - "$ref": "#/components/schemas/A1GatewayMpis" - } - } - } - ] - }, - "AmexVPC": { - "description": "AmexVPC config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "description": "AmexVPC credentials object", - "properties": { - "url": { - "type": "string", - "description": "Virtual Payment Client URL" - }, - "merchantId": { - "type": "string", - "description": "Merchant ID" - }, - "accessCode": { - "type": "string", - "description": "Access Code", - "format": "password" - }, - "user": { - "type": "string", - "description": "User (used for refund, void and capture)" - }, - "password": { - "type": "string", - "description": "Password (used for refund, void and capture)", - "format": "password" - } - }, - "required": [ - "url", - "merchantId", - "accessCode", - "user", - "password" - ] - } - } - } - ] - }, - "AuthorizeNet": { - "description": "AuthorizeNet Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "apiLoginId": { - "type": "string", - "description": "AuthorizeNet Gateway api login ID" - }, - "transactionKey": { - "description": "AuthorizeNet Gateway Transaction Key", - "type": "string", - "format": "password" - } - }, - "required": [ - "apiLoginId", - "transactionKey" - ] - } - } - } - ] - }, - "Beanstream": { - "description": "Beanstream Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantId": { - "type": "string", - "description": "Beanstream Gateway merchant ID" - }, - "apiPasscode": { - "type": "string", - "description": "Beanstream Gateway API Passcode", - "format": "password" - } - }, - "required": [ - "merchantId", - "apiPasscode" - ] - } - } - } - ] - }, - "BraintreePayments": { - "description": "BraintreePayments Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "publicKey": { - "type": "string", - "description": "BraintreePayments Public Key" - }, - "privateKey": { - "type": "string", - "description": "BraintreePayments Private Key", - "format": "password" - }, - "merchantId": { - "type": "string", - "description": "BraintreePayments merchant ID", - "format": "password" - }, - "merchantAccountId": { - "type": "string", - "description": "BraintreePayments merchant account ID", - "format": "password" - } - }, - "required": [ - "publicKey", - "privateKey", - "merchantId", - "merchantAccountId" - ] - } - } - } - ] - }, - "Cashflows": { - "description": "Cashflows Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "authId": { - "type": "string", - "description": "Cashflows Gateway auth ID" - }, - "authPassword": { - "type": "string", - "description": "Cashflows Gateway auth password", - "format": "password" - } - }, - "required": [ - "authPassword", - "authId" - ] - } - } - } - ] - }, - "Cayan": { - "description": "Cayan Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantSiteId": { - "type": "string", - "description": "Cayan Gateway merchant site ID" - }, - "merchantName": { - "type": "string", - "description": "Cayan Gateway merchant name" - }, - "merchantKey": { - "type": "string", - "description": "Cayan Gateway merchant key", - "format": "password" - } - }, - "required": [ - "merchantSiteId", - "merchantName", - "merchantKey" - ] - } - } - } - ] - }, - "Chase": { - "description": "Chase Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "Chase Gateway Net Connect username" - }, - "password": { - "type": "string", - "description": "Chase Gateway Net Connect password", - "format": "password" - }, - "coNumber": { - "type": "string", - "description": "Chase Gateway CO Number used for delimited file reports" - }, - "divisionId": { - "type": "string", - "description": "Chase Gateway division ID" - }, - "partialAuth": { - "type": "boolean", - "description": "Support for Partial Auths", - "default": false - } - }, - "required": [ - "username", - "password", - "coNumber", - "divisionId", - "partialAuth" - ] - } - } - } - ] - }, - "ChinaUnionPay": { - "description": "China Union Pay Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "accountId": { - "type": "string", - "description": "China Union Pay Gateway account ID" - }, - "partyId": { - "type": "string", - "description": "China Union Pay Gateway party ID" - }, - "goods": { - "type": "string", - "description": "China Union Pay Gateway goods" - }, - "md5key": { - "type": "string", - "description": "China Union Pay Gateway md5key", - "format": "password" - }, - "mobilePay": { - "type": "string", - "description": "China Union Pay Gateway mobile pay param" - } - }, - "required": [ - "accountId", - "partyId", - "goods", - "md5key", - "mobilePay" - ] - } - } - } - ] - }, - "Credorax": { - "description": "Credorax Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantId": { - "type": "string", - "description": "Credorax Gateway merchant ID" - }, - "merchantMd5Signature": { - "type": "string", - "description": "Credorax Gateway md5 signature", - "format": "password" - } - }, - "required": [ - "merchantId", - "merchantMd5Signature" - ] - } - } - } - ] - }, - "DataCash": { - "description": "DataCash Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "client": { - "type": "string", - "description": "DataCash Gateway client" - }, - "password": { - "type": "string", - "description": "DataCash Gateway password", - "format": "password" - }, - "policy": { - "type": "integer", - "description": "Policy", - "minimum": 0, - "maximum": 7, - "default": 2 - }, - "delay": { - "type": "integer", - "description": "Auto Capture delay (in hours)", - "minimum": 0, - "default": 0 - } - }, - "required": [ - "client", - "password", - "policy", - "delay" - ] - }, - "mpi": { - "$ref": "#/components/schemas/DataCashMpis" - } - } - } - ] - }, - "Dengi": { - "description": "Dengi Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "projectId": { - "type": "string", - "description": "Dengi Gateway project ID" - }, - "publicKey": { - "type": "string", - "description": "Dengi Gateway public key", - "format": "password" - }, - "refundKey": { - "type": "string", - "description": "Dengi Gateway refund key", - "format": "password" - } - }, - "required": [ - "projectId", - "publicKey", - "refundKey" - ] - } - } - } - ] - }, - "eMerchantPay": { - "description": "eMerchantPay Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "clientId": { - "type": "string", - "description": "eMerchantPay Gateway client ID" - }, - "apiKey": { - "type": "string", - "description": "eMerchantPay Gateway api key", - "format": "password" - } - }, - "required": [ - "clientId", - "apiKey" - ] - }, - "mpi": { - "$ref": "#/components/schemas/eMerchantPayMpis" - } - } - } - ] - }, - "Flexepin": { - "description": "Flexepin Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "apiKey": { - "type": "string", - "description": "Flexepin API Key" - }, - "apiSecret": { - "type": "string", - "description": "Flexepin API Secret", - "format": "password" - } - }, - "required": [ - "apiKey", - "apiSecret" - ] - } - } - } - ] - }, - "Forte": { - "description": "Forte Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "accountId": { - "type": "string", - "description": "Forte Gateway account ID" - }, - "locationId": { - "type": "string", - "description": "Forte Gateway location ID" - }, - "apiAccessId": { - "type": "string", - "description": "Forte Gateway api access ID", - "format": "password" - }, - "apiSecretKey": { - "type": "string", - "description": "Forte Gateway api secret key", - "format": "password" - } - }, - "required": [ - "accountId", - "locationId", - "apiAccessId", - "apiSecretKey" - ] - } - } - } - ] - }, - "FundSend": { - "description": "FundSend Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "clientId": { - "type": "string", - "description": "FundSend Gateway client ID" - }, - "secretWord": { - "type": "string", - "description": "FundSend Gateway secret word", - "format": "password" - } - }, - "required": [ - "clientId", - "secretWord" - ] - } - } - } - ] - }, - "GET": { - "description": "GET Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "accountId": { - "type": "string", - "description": "GET Gateway account ID" - } - }, - "required": [ - "accountId" - ] - }, - "mpi": { - "$ref": "#/components/schemas/GETMpis" - } - } - } - ] - }, - "GlobalCollect": { - "description": "GlobalCollect Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantId": { - "type": "string", - "description": "GlobalCollect Gateway merchant ID" - }, - "apiKeyId": { - "type": "string", - "description": "GlobalCollect Gateway api key ID" - }, - "apiSecretKey": { - "type": "string", - "description": "GlobalCollect Gateway api secret key", - "format": "password" - }, - "skipFraudService": { - "type": "boolean", - "description": "GlobalCollect skip fraud service" - } - }, - "required": [ - "merchantId", - "apiKeyId", - "apiSecretKey" - ] - }, - "mpi": { - "$ref": "#/components/schemas/GlobalCollectMpis" - } - } - } - ] - }, - "GlobalOne": { - "description": "GlobalOne Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "terminalId": { - "type": "string", - "description": "GlobalOne Gateway terminal ID" - }, - "sharedSecret": { - "type": "string", - "description": "GlobalOne Gateway shared secret", - "format": "password" - } - }, - "required": [ - "terminalId", - "sharedSecret" - ] - } - } - } - ] - }, - "Gpaysafe": { - "description": "Gpaysafe Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "apiKey": { - "type": "string", - "description": "Gpaysafe apiKey" - } - }, - "required": [ - "apiKey" - ] - } - } - } - ] - }, - "iCheque": { - "description": "iCheque Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "clientId": { - "type": "string", - "description": "iCheque Gateway client ID" - }, - "secretWord": { - "type": "string", - "description": "iCheque Gateway secret word", - "format": "password" - } - }, - "required": [ - "clientId", - "secretWord" - ] - } - } - } - ] - }, - "Ilixium": { - "description": "Ilixium Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantId": { - "type": "string", - "description": "Ilixium Gateway merchant ID" - }, - "accountId": { - "type": "string", - "description": "Ilixium Gateway account ID" - }, - "digestPassword": { - "type": "string", - "description": "Ilixium Gateway digest password", - "format": "password" - } - }, - "required": [ - "merchantId", - "accountId", - "digestPassword" - ] - }, - "mpi": { - "$ref": "#/components/schemas/IlixiumMpis" - } - } - } - ] - }, - "Jeton": { - "description": "Jeton Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "apiKey": { - "type": "string", - "description": "Jeton apiKey" - } - }, - "required": [ - "apiKey" - ] - } - } - } - ] - }, - "JetPay": { - "description": "JetPay Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "TerminalID": { - "type": "string", - "description": "JetPay Gateway terminal ID" - } - }, - "required": [ - "TerminalID" - ] - } - } - } - ] - }, - "Moneris": { - "description": "Moneris Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "apiToken": { - "type": "string", - "description": "Moneris Gateway api token", - "format": "password" - }, - "storeId": { - "type": "string", - "description": "Moneris Gateway store ID" - } - }, - "required": [ - "storeId", - "apiToken" - ] - } - } - } - ] - }, - "NMI": { - "description": "NMI Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "NMI Gateway api token" - }, - "password": { - "type": "string", - "description": "NMI Gateway store ID", - "format": "password" - } - }, - "required": [ - "username", - "password" - ] - }, - "mpi": { - "$ref": "#/components/schemas/NMIMpis" - } - } - } - ] - }, - "OchaPay": { - "description": "OchaPay Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "apiUsername": { - "type": "string", - "description": "OchaPay Gateway username" - }, - "apiPassword": { - "type": "string", - "description": "OchaPay Gateway api password", - "format": "password" - }, - "secretWord": { - "type": "string", - "description": "OchaPay Gateway secret word", - "format": "password" - } - }, - "required": [ - "apiUsername", - "apiPassword", - "secretWord" - ] - } - } - } - ] - }, - "Optimal": { - "description": "Optimal Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "storeId": { - "type": "string", - "description": "Optimal Gateway store ID" - }, - "storePwd": { - "type": "string", - "description": "Optimal Gateway store password", - "format": "password" - }, - "accountNum": { - "type": "string", - "description": "Optimal Gateway account number" - } - }, - "required": [ - "storeId", - "storePwd", - "accountNum" - ] - }, - "mpi": { - "$ref": "#/components/schemas/OptimalMpis" - } - } - } - ] - }, - "PandaGateway": { - "description": "Panda Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantCode": { - "type": "string", - "description": "Panda Gateway merchant code" - }, - "apiCode": { - "type": "string", - "description": "Panda Gateway api code" - }, - "signKey": { - "type": "string", - "description": "Panda Gateway sign key", - "format": "password" - } - }, - "required": [ - "merchantCode", - "apiCode", - "signKey" - ] - } - } - } - ] - }, - "Payeezy": { - "description": "Payeezy Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantId": { - "type": "string", - "description": "Payeezy Merchant ID" - }, - "merchantToken": { - "type": "string", - "description": "Merchant Token", - "format": "password" - }, - "apiKey": { - "type": "string", - "description": "API Key" - }, - "apiSecret": { - "type": "string", - "description": "API Secret", - "format": "password" - } - }, - "required": [ - "merchantId", - "merchantToken", - "apiKey", - "apiSecret" - ] - } - } - } - ] - }, - "Payflow": { - "description": "Payflow config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "description": "Payflow credentials object", - "properties": { - "user": { - "type": "string", - "description": "If you set up one or more additional users on the account, this value is the ID of the user authorized to process transactions. If, however, you have not set up additional users, USER has the same value as VENDOR" - }, - "vendor": { - "type": "string", - "description": "Your merchant login ID created when you registered for the account." - }, - "password": { - "type": "string", - "description": "The password you defined while registering for the account.", - "format": "password" - } - }, - "required": [ - "user", - "vendor", - "password" - ] - } - } - } - ] - }, - "PayPal": { - "description": "PayPal Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantIdInPayPal": { - "type": "string", - "description": "PayPal Gateway merchant id" - }, - "redirectUrl": { - "type": "string", - "description": "PayPal Gateway redirect url", - "format": "url" - } - }, - "required": [ - "merchantIdInPayPal", - "redirectUrl" - ] - } - } - } - ] - }, - "Payr": { - "description": "Payr Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "clientId": { - "type": "string", - "description": "Payr Gateway client ID" - }, - "secretWord": { - "type": "string", - "description": "Payr Gateway secret word", - "format": "password" - } - }, - "required": [ - "clientId", - "secretWord" - ] - } - } - } - ] - }, - "Payvision": { - "description": "Payvision Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "memberId": { - "type": "string", - "description": "Payvision Gateway member id" - }, - "memberGuid": { - "type": "string", - "description": "Payvision Gateway member guid", - "format": "password" - }, - "avs": { - "type": "boolean", - "description": "Payvision Gateway avs" - }, - "delay": { - "type": "integer", - "description": "Payvision Gateway delay" - } - }, - "required": [ - "memberId", - "memberGuid", - "avs", - "delay" - ] - }, - "mpi": { - "$ref": "#/components/schemas/PayvisionMpis" - } - } - } - ] - }, - "Plugnpay": { - "description": "Plugnpay Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "publisher-name": { - "type": "string", - "description": "Plugnpay Gateway member id" - }, - "publisher-password": { - "type": "string", - "description": "Plugnpay Gateway avs", - "format": "password" - } - }, - "required": [ - "publisher-name", - "publisher-password" - ] - } - } - } - ] - }, - "Realex": { - "description": "Realex Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantId": { - "type": "string", - "description": "Realex Gateway merchant id" - }, - "secretKey": { - "type": "string", - "description": "Realex Gateway secret key", - "format": "password" - }, - "rebatePassword": { - "type": "string", - "description": "Realex Gateway rebate password", - "format": "password" - }, - "account": { - "type": "string", - "description": "Realex Gateway account" - } - }, - "required": [ - "merchantId", - "secretKey", - "rebatePassword", - "account" - ] - } - } - } - ] - }, - "RealTime": { - "description": "RealTime Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "clientId": { - "type": "string", - "description": "RealTime Gateway client ID" - }, - "secretWord": { - "type": "string", - "description": "RealTime Gateway secret word", - "format": "password" - } - }, - "required": [ - "clientId", - "secretWord" - ] - } - } - } - ] - }, - "RebillyProcessor": { - "description": "RebillyProcessor Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "properties": { - "mpi": { - "$ref": "#/components/schemas/RebillyProcessorMpis" - } - } - } - ] - }, - "Redsys": { - "description": "Redsys Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantCode": { - "type": "string", - "description": "Redsys Gateway merchant code", - "format": "password" - }, - "secretCode": { - "type": "string", - "description": "Redsys Gateway secret code", - "format": "password" - } - }, - "required": [ - "merchantCode", - "secretCode" - ] - } - } - } - ] - }, - "RPN": { - "description": "RPN Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "mid": { - "type": "string", - "description": "RPN MID" - }, - "key": { - "type": "string", - "description": "RPN Key", - "format": "password" - } - }, - "required": [ - "mid", - "key" - ] - } - } - } - ] - }, - "Sagepay": { - "description": "Sagepay Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "M_ID": { - "type": "string", - "description": "Sagepay Gateway merchant ID" - }, - "M_KEY": { - "type": "string", - "description": "Sagepay Gateway merchant key", - "format": "password" - } - }, - "required": [ - "M_ID", - "M_KEY" - ] - } - } - } - ] - }, - "SMSVoucher": { - "description": "SMSVoucher Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "AppId": { - "type": "string", - "description": "SMSVoucher AppId" - } - }, - "required": [ - "AppId" - ] - } - } - } - ] - }, - "Stripe": { - "description": "Stripe Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "redirectUrl": { - "type": "string", - "description": "Stripe Gateway redirect url", - "format": "url" - } - }, - "required": [ - "redirectUrl" - ] - } - } - } - ] - }, - "UPayCard": { - "description": "UPayCard Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "receiver_account": { - "type": "string", - "description": "merchant receiver account" - }, - "key": { - "type": "string", - "description": "merchant key", - "format": "password" - }, - "secret": { - "type": "string", - "description": "merchant secret", - "format": "password" - } - }, - "required": [ - "receiver_account", - "key", - "secret" - ] - } - } - } - ] - }, - "USAePay": { - "description": "USAePay Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "sourceKey": { - "type": "string", - "description": "USAePay Gateway source key", - "format": "password" - }, - "pin": { - "type": "string", - "description": "USAePay Gateway pin", - "format": "password" - } - }, - "required": [ - "sourceKey", - "pin" - ] - } - } - } - ] - }, - "VantivLitle": { - "description": "VantivLitle Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "VantivLitle Gateway username" - }, - "password": { - "type": "string", - "description": "VantivLitle Gateway password", - "format": "password" - }, - "merchantId": { - "type": "string", - "description": "VantivLitle Gateway merchant ID" - } - }, - "required": [ - "username", - "password", - "merchantId" - ] - }, - "mpi": { - "$ref": "#/components/schemas/VantivLitleMpis" - } - } - } - ] - }, - "vegaaH": { - "description": "vegaaH Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "terminalId": { - "type": "string", - "description": "vegaaH Gateway terminal ID" - }, - "password": { - "type": "string", - "description": "vegaaH Gateway password", - "format": "password" - } - }, - "required": [ - "terminalId", - "password" - ] - } - } - } - ] - }, - "Walpay": { - "description": "Walpay Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantName": { - "type": "string", - "description": "Walpay Gateway merchant name" - }, - "merchantPin": { - "type": "string", - "description": "Walpay Gateway merchant pin", - "format": "password" - } - }, - "required": [ - "merchantName", - "merchantPin" - ] - }, - "mpi": { - "$ref": "#/components/schemas/WalpayMpis" - } - } - } - ] - }, - "Wirecard": { - "description": "Wirecard Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantUsername": { - "type": "string", - "description": "Wirecard Gateway merchant username" - }, - "merchantPassword": { - "type": "string", - "description": "Wirecard Gateway merchant password", - "format": "password" - }, - "businessSignature": { - "type": "string", - "description": "Wirecard Gateway merchant business case signature", - "format": "password" - }, - "delay": { - "type": "integer", - "description": "Wirecard Gateway delay" - } - }, - "required": [ - "merchantUsername", - "merchantPassword", - "businessSignature", - "delay" - ] - }, - "mpi": { - "$ref": "#/components/schemas/WirecardMpis" - } - } - } - ] - }, - "Worldpay": { - "description": "Worldpay Gateway config", - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccount" - }, - { - "type": "object", - "required": [ - "gatewayConfig" - ], - "properties": { - "gatewayConfig": { - "type": "object", - "properties": { - "merchantCode": { - "type": "string", - "description": "Worldpay Gateway merchant code", - "format": "password" - }, - "merchantPassword": { - "type": "string", - "description": "Worldpay Gateway merchant password", - "format": "password" - } - }, - "required": [ - "merchantCode", - "merchantPassword" - ] - }, - "mpi": { - "$ref": "#/components/schemas/WorldpayMpis" - } - } - } - ] - }, - "AcquirerName": { - "description": "Acquirer name", - "type": "string", - "enum": [ - "Alipay", - "AIB", - "B+S", - "Bank of America", - "Bank of Moscow", - "Bank of Rebilly", - "Bank One", - "Beanstream", - "BMO Harris Bank", - "Borgun", - "BraintreePayments", - "Catalunya Caixa", - "Chase", - "ChinaUnionPay", - "CIM", - "Credorax", - "Elavon", - "EMS", - "Fifth Third Bank", - "First Data Buypass", - "First Data Nashville", - "First Data North", - "First Data Omaha", - "Flexepin", - "Forte", - "FundSend", - "GlobalCollect", - "Global East", - "Gpaysafe", - "Heartland", - "HSBC", - "iCheque", - "Ilixium", - "Jeton", - "Masapay", - "Merrick", - "Mission Valley Bank", - "Moneris", - "NATWEST", - "NMI", - "OchaPay", - "Other", - "Panda Bank", - "PayPal", - "Payr", - "Payvision", - "Peoples Trust Company", - "Privatbank", - "RBC", - "RBS WorldPay", - "RealTime", - "RebillyProcessor", - "SMSVoucher", - "State Bank of Mauritius", - "Stripe", - "TBI", - "TrustPay", - "TSYS", - "UPayCard", - "Vantiv", - "VoicePay", - "WeChat Pay", - "Wells Fargo", - "Wing Hang Bank", - "Wirecard", - "WorldPay" - ] - }, - "GatewayName": { - "description": "The gateway name", - "type": "string", - "enum": [ - "A1Gateway", - "AmexVPC", - "AuthorizeNet", - "Beanstream", - "BraintreePayments", - "Cashflows", - "Cayan", - "Chase", - "ChinaUnionPay", - "Credorax", - "DataCash", - "Dengi", - "eMerchantPay", - "Flexepin", - "FundSend", - "Forte", - "GET", - "GlobalCollect", - "GlobalOne", - "Gpaysafe", - "iCheque", - "Ilixium", - "JetPay", - "Jeton", - "Moneris", - "NMI", - "OchaPay", - "Optimal", - "PandaGateway", - "Payeezy", - "Payflow", - "PayPal", - "Payr", - "Payvision", - "Plugnpay", - "Realex", - "RealTime", - "RebillyProcessor", - "Redsys", - "RPN", - "Sagepay", - "SMSVoucher", - "Stripe", - "UPayCard", - "USAePay", - "VantivLitle", - "vegaaH", - "Walpay", - "Wirecard", - "Worldpay" - ] - }, - "MpiName": { - "description": "The Merchant plug-in Name", - "type": "string", - "enum": [ - "PayvisionMpi", - "WirecardMpi", - "IlixiumMpi", - "DataCashMpi", - "OptimalMpi", - "GlobalCollectMpi", - "CardinalCommerce", - "Other" - ] - }, - "GlobalWebhook": { - "type": "object", - "required": [ - "method", - "url", - "credentialHash" - ], - "properties": { - "id": { - "description": "The webhook identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "eventsFilter": { - "description": "An array of System event type", - "type": "array", - "default": [], - "items": { - "$ref": "#/components/schemas/GlobalWebhookEventType" - } - }, - "status": { - "$ref": "#/components/schemas/OnOff" - }, - "method": { - "type": "string", - "enum": [ - "GET", - "POST", - "PUT", - "PATCH", - "DELETE" - ] - }, - "url": { - "description": "URL that will be triggered when the given event occurs.", - "type": "string", - "format": "uri" - }, - "headers": { - "type": "object", - "description": "Map of elements with header name - header value association" - }, - "credentialHash": { - "type": "string", - "description": "Hash from Credentials which is used for authentication by the given URL" - }, - "createdTime": { - "description": "List created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "List updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "Links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "GlobalWebhookEventType": { - "type": "string", - "description": "Rebilly webhooks event type", - "enum": [ - "gateway-account-requested", - "subscription-trial-ended", - "subscription-activated", - "subscription-canceled", - "subscription-renewed", - "transaction-processed", - "payment-card-expired", - "payment-declined", - "invoice-modified", - "invoice-created", - "dispute-created", - "suspended-payment-completed" - ] - }, - "InvalidError": { - "allOf": [ - { - "$ref": "#/components/schemas/Error" - }, - { - "type": "object", - "properties": { - "details": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - ] - }, - "Invoice": { - "type": "object", - "required": [ - "customerId", - "websiteId", - "currency" - ], - "properties": { - "id": { - "description": "The invoice identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "The customer's ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "websiteId": { - "description": "The website's ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "organizationId": { - "description": "The organization's ID", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "subscriptionId": { - "description": "The related Subscription's ID if available, otherwise null", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "currency": { - "description": "The currency three letter code", - "type": "string" - }, - "amount": { - "description": "The Invoice's amount", - "type": "number", - "format": "double", - "readOnly": true - }, - "shippingAmount": { - "description": "The Invoice's shipping amount", - "type": "number", - "format": "double", - "readOnly": true - }, - "billingAddress": { - "description": "Invoice's billing address", - "allOf": [ - { - "$ref": "#/components/schemas/ContactObject" - } - ] - }, - "deliveryAddress": { - "description": "Invoice's delivery address", - "allOf": [ - { - "$ref": "#/components/schemas/ContactObject" - } - ] - }, - "notes": { - "description": "Notes for the customer which will display on the invoice", - "type": "string" - }, - "items": { - "type": "array", - "description": "Invoice items array", - "readOnly": true, - "items": { - "type": "string" - } - }, - "taxes": { - "type": "array", - "description": "Taxes applied to this invoice", - "readOnly": true, - "items": { - "allOf": [ - { - "$ref": "#/components/schemas/InvoiceTax" - } - ] - } - }, - "discounts": { - "type": "array", - "description": "Discounts applied", - "readOnly": true, - "items": { - "allOf": [ - { - "$ref": "#/components/schemas/InvoiceDiscount" - } - ] - } - }, - "status": { - "type": "string", - "description": "Invoice status.", - "readOnly": true, - "enum": [ - "draft", - "issued", - "past-due", - "paid", - "abandoned", - "voided" - ] - }, - "delinquentCollectionPeriod": { - "type": "integer", - "description": "Delinquent Collection Period - difference between paidTime and dueTime in days.", - "readOnly": true - }, - "collectionPeriod": { - "type": "integer", - "description": "Collection Period - difference between paidTime and issuedTime in days.", - "readOnly": true - }, - "abandonedTime": { - "description": "Invoice abandoned time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "voidedTime": { - "description": "Invoice voided time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "paidTime": { - "description": "Invoice paid time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "dueTime": { - "description": "Invoice due time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "issuedTime": { - "description": "Invoice issued time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "createdTime": { - "description": "Invoice created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 6, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/CustomerLink" - }, - { - "$ref": "#/components/schemas/WebsiteLink" - }, - { - "$ref": "#/components/schemas/BillingContactLink" - }, - { - "$ref": "#/components/schemas/DeliveryContactLink" - }, - { - "$ref": "#/components/schemas/OrganizationLink" - }, - { - "$ref": "#/components/schemas/LeadSourceLink" - } - ] - } - } - } - }, - "InvoiceIssue": { - "type": "object", - "properties": { - "issuedTime": { - "type": "string", - "format": "date-time" - } - } - }, - "InvoiceItem": { - "type": "object", - "required": [ - "type", - "unitPrice" - ], - "properties": { - "id": { - "description": "The website identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "type": { - "description": "Invoice item's type", - "type": "string", - "enum": [ - "debit", - "credit" - ] - }, - "unitPrice": { - "description": "Invoice item's price", - "type": "number", - "format": "double" - }, - "quantity": { - "description": "Invoice item's quantity", - "type": "integer" - }, - "productId": { - "description": "The product's ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "description": { - "description": "Invoice item's description", - "type": "string" - }, - "discountAmount": { - "description": "Invoice item discount amount", - "type": "number", - "format": "double", - "readOnly": true - }, - "periodStartTime": { - "description": "Start time", - "type": "string", - "format": "date-time" - }, - "periodEndTime": { - "description": "End time", - "type": "string", - "format": "date-time" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 2, - "items": { - "x-tuple": true, - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/SubscriptionLink" - } - ] - } - } - } - }, - "InvoiceTax": { - "type": "object", - "readOnly": true, - "properties": { - "amount": { - "description": "Tax amount", - "type": "number", - "format": "double" - }, - "description": { - "type": "string", - "description": "Tax description" - } - } - }, - "Layout": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "id": { - "description": "The layout identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "name": { - "description": "The name of the layout string", - "type": "string" - }, - "items": { - "description": "The array of layout items (planId and starred)", - "type": "array", - "items": { - "$ref": "#/components/schemas/LayoutItem" - } - }, - "createdTime": { - "description": "Layout created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 2, - "maxItems": 2, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/ItemsLink" - } - ] - } - } - } - }, - "LayoutItem": { - "type": "object", - "required": [ - "planId" - ], - "properties": { - "planId": { - "description": "The plan identifier string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "starred": { - "description": "Boolean if the plan should be starred (special callout presentation)", - "type": "boolean" - }, - "order": { - "description": "Item's order in Layout", - "type": "integer", - "readOnly": true - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "LeadSource": { - "type": "object", - "properties": { - "id": { - "description": "The lead source identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "medium": { - "description": "Lead Source's medium (eg search, display)", - "type": "string" - }, - "source": { - "description": "Lead Source's source (eg google, yahoo)", - "type": "string" - }, - "campaign": { - "description": "Lead Source's campaign (eg go-big-123)", - "type": "string" - }, - "term": { - "description": "Lead Source's term (eg salt shakers)", - "type": "string" - }, - "content": { - "description": "Lead Source's content (eg smiley faces)", - "type": "string" - }, - "affiliate": { - "description": "Lead Source's affiliate (eg 123, Bob Smith)", - "type": "string" - }, - "subAffiliate": { - "description": "Lead Source's sub-affiliate also called a sub-id or click id in some circles (eg 123456)", - "type": "string" - }, - "salesAgent": { - "description": "Lead Source's sales agent (eg James Bond)", - "type": "string" - }, - "clickId": { - "description": "Lead Source's click id (may come from an ad server)", - "type": "string" - }, - "path": { - "description": "Lead Source's path uri (eg www.example.com/some/landing/path)", - "type": "string" - }, - "ipAddress": { - "description": "Customer's IP Address", - "type": "string" - }, - "currency": { - "description": "Currency (three letter ISO 4217 alpha code) (eg USD, EUR)", - "type": "string" - }, - "amount": { - "description": "The amount that the lead cost", - "type": "number", - "format": "double" - }, - "createdTime": { - "description": "LeadSource created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "LeadSource updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 2, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/CustomerLink" - } - ] - } - } - } - }, - "ApprovalUrlLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "approvalUrl" - ] - } - }, - "required": [ - "rel" - ] - }, - "AttachmentResourceLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "customer", - "dispute", - "invoice", - "note", - "payment", - "plan", - "product", - "subscription", - "transaction" - ] - } - }, - "required": [ - "rel" - ] - }, - "BankAccountLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "bankAccount" - ] - } - }, - "required": [ - "rel" - ] - }, - "BillingContactLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "billingContact" - ] - } - }, - "required": [ - "rel" - ] - }, - "CancelUrlLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "cancelUrl" - ] - } - }, - "required": [ - "rel" - ] - }, - "ContactLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "contact" - ] - } - }, - "required": [ - "rel" - ] - }, - "CustomerLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "customer" - ] - } - }, - "required": [ - "rel" - ] - }, - "DefaultPaymentInstrumentLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "defaultPaymentInstrument" - ] - } - }, - "required": [ - "rel" - ] - }, - "DeliveryContactLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "deliveryContact" - ] - } - }, - "required": [ - "rel" - ] - }, - "DisputeLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "dispute" - ] - } - }, - "required": [ - "rel" - ] - }, - "FileLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "file" - ] - } - }, - "required": [ - "rel" - ] - }, - "GatewayAccountLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "gatewayAccount" - ] - } - }, - "required": [ - "rel" - ] - }, - "ItemsLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "items" - ] - } - }, - "required": [ - "rel" - ] - }, - "LeadSourceLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "leadSource" - ] - } - }, - "required": [ - "rel" - ] - }, - "NewLink": { - "type": "object", - "properties": { - "href": { - "description": "The link URL", - "type": "string" - } - }, - "required": [ - "href" - ] - }, - "NotesLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "notes" - ] - } - }, - "required": [ - "rel" - ] - }, - "OnBoardingUrlLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "onBoardingUrl" - ] - } - }, - "required": [ - "rel" - ] - }, - "OrganizationLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "organization" - ] - } - }, - "required": [ - "rel" - ] - }, - "ParentTransactionLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "parentTransaction" - ] - } - }, - "required": [ - "rel" - ] - }, - "PaymentCardLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "paymentCard" - ] - } - }, - "required": [ - "rel" - ] - }, - "PaymentLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "payment" - ] - } - }, - "required": [ - "rel" - ] - }, - "PermalinkLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "permalink" - ] - } - }, - "required": [ - "rel" - ] - }, - "PlanLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "plan" - ] - } - }, - "required": [ - "rel" - ] - }, - "RefundUrlLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "refundUrl" - ] - } - }, - "required": [ - "rel" - ] - }, - "RetriedTransactionLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "retriedTransaction" - ] - } - }, - "required": [ - "rel" - ] - }, - "RuleSetVersionLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "rules" - ] - } - }, - "required": [ - "rel" - ] - }, - "SelfLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "self" - ] - } - }, - "required": [ - "rel" - ] - }, - "SubscriptionLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "subscription" - ] - } - }, - "required": [ - "rel" - ] - }, - "TransactionLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "transaction" - ] - } - }, - "required": [ - "rel" - ] - }, - "WebsiteLink": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NewLink" - } - ], - "properties": { - "rel": { - "description": "The link type", - "type": "string", - "enum": [ - "website" - ] - } - }, - "required": [ - "rel" - ] - }, - "List": { - "type": "object", - "required": [ - "name", - "values" - ], - "properties": { - "id": { - "description": "List ID", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "version": { - "description": "List version", - "type": "integer", - "readOnly": true, - "minimum": 1 - }, - "name": { - "description": "List name", - "type": "string" - }, - "values": { - "description": "List values", - "type": "array", - "items": { - "type": "string" - } - }, - "createdTime": { - "description": "List created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "List updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "Links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "Method": { - "type": "string", - "description": "The payment method", - "enum": [ - "ach", - "cash", - "payment-card", - "paypal", - "Alipay", - "China UnionPay", - "Flexepin", - "Gpaysafe", - "Jeton", - "OchaPay", - "SMSVoucher", - "UPayCard", - "WeChat Pay" - ] - }, - "A1GatewayMpis": { - "description": "A1Gateway Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "Other" - ] - } - } - }, - "DataCashMpi": { - "description": "DataCash Integrated", - "allOf": [ - { - "$ref": "#/components/schemas/DataCashMpis" - } - ] - }, - "DataCashMpis": { - "description": "DataCash Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "DataCashMpi" - ] - } - } - }, - "eMerchantPayMpis": { - "description": "eMerchantPay Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "Other" - ] - } - } - }, - "GETMpis": { - "description": "GET Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "Other" - ] - } - } - }, - "GlobalCollectMpi": { - "description": "GlobalCollect Integrated", - "allOf": [ - { - "$ref": "#/components/schemas/GlobalCollectMpis" - } - ] - }, - "GlobalCollectMpis": { - "description": "GlobalCollect Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "GlobalCollectMpi" - ] - } - } - }, - "IlixiumMpi": { - "description": "Ilixium Integrated", - "allOf": [ - { - "$ref": "#/components/schemas/IlixiumMpis" - } - ] - }, - "IlixiumMpis": { - "description": "IlixiumMpis Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "IlixiumMpi" - ] - } - } - }, - "NMIMpis": { - "description": "NMI Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "Other" - ] - } - } - }, - "OptimalMpi": { - "description": "Optimal Integrated", - "allOf": [ - { - "$ref": "#/components/schemas/OptimalMpis" - } - ] - }, - "OptimalMpis": { - "description": "Optimal Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "OptimalMpi" - ] - } - } - }, - "Other": { - "description": "Other", - "allOf": [ - { - "$ref": "#/components/schemas/A1GatewayMpis" - }, - { - "$ref": "#/components/schemas/eMerchantPayMpis" - }, - { - "$ref": "#/components/schemas/GETMpis" - }, - { - "$ref": "#/components/schemas/NMIMpis" - }, - { - "$ref": "#/components/schemas/PayvisionMpis" - }, - { - "$ref": "#/components/schemas/VantivLitleMpis" - }, - { - "$ref": "#/components/schemas/WalpayMpis" - }, - { - "$ref": "#/components/schemas/WorldpayMpis" - } - ] - }, - "CardinalCommerce": { - "description": "CardinalCommerce Mpi Credentials", - "allOf": [ - { - "$ref": "#/components/schemas/PayvisionMpis" - }, - { - "type": "object", - "required": [ - "merchantId", - "processorId", - "transactionPwd" - ], - "properties": { - "merchantId": { - "type": "string", - "description": "Cardinal MerchantId" - }, - "processorId": { - "type": "string", - "description": "Cardinal ProcessorId" - }, - "transactionPwd": { - "type": "string", - "format": "password", - "description": "Cardinal TransactionPwd" - } - } - } - ] - }, - "PayvisionMpi": { - "description": "Payvision Integrated", - "allOf": [ - { - "$ref": "#/components/schemas/PayvisionMpis" - } - ] - }, - "PayvisionMpis": { - "description": "Payvision Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "PayvisionMpi", - "CardinalCommerce", - "Other" - ] - } - } - }, - "RebillyProcessorMpi": { - "description": "RebillyProcessor Integrated", - "allOf": [ - { - "$ref": "#/components/schemas/RebillyProcessorMpis" - } - ] - }, - "RebillyProcessorMpis": { - "description": "RebillyProcessorMpis Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "RebillySandboxMpi" - ] - } - } - }, - "VantivLitleMpis": { - "description": "VantivLitle Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "Other" - ] - } - } - }, - "WalpayMpis": { - "description": "WalpayMpis Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "Other" - ] - } - } - }, - "WirecardMpi": { - "description": "Wirecard Integrated", - "allOf": [ - { - "$ref": "#/components/schemas/WirecardMpis" - } - ] - }, - "WirecardMpis": { - "description": "Wirecard Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "WirecardMpi" - ] - } - } - }, - "WorldpayMpis": { - "description": "Worldpay Mpis", - "discriminator": { - "propertyName": "name" - }, - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "allOf": [ - { - "$ref": "#/components/schemas/MpiName" - } - ], - "enum": [ - "Other" - ] - } - } - }, - "Note": { - "type": "object", - "required": [ - "content", - "relatedType", - "relatedId" - ], - "properties": { - "id": { - "description": "The note identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "createdBy": { - "description": "The note's creator", - "type": "string", - "readOnly": true - }, - "content": { - "description": "The note's name", - "type": "string" - }, - "archived": { - "description": "Is the note archived (excluded from List method)", - "type": "boolean" - }, - "relatedType": { - "description": "The note's related resource type", - "type": "string", - "enum": [ - "customer", - "payment-card", - "payment-gateway", - "subscription", - "transaction" - ] - }, - "relatedId": { - "description": "The note's related resource ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "createdTime": { - "description": "Note created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Note updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "archivedTime": { - "description": "Note archived time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "OnOff": { - "type": "string", - "default": "active", - "enum": [ - "active", - "inactive" - ] - }, - "Organization": { - "type": "object", - "required": [ - "name", - "country" - ], - "properties": { - "id": { - "description": "The organization identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "createdTime": { - "$ref": "#/components/schemas/ServerTimestamp" - }, - "updatedTime": { - "description": "The organization updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "name": { - "description": "The organization name", - "type": "string", - "maxLength": 60 - }, - "address": { - "description": "The organization street address", - "type": "string", - "maxLength": 60 - }, - "address2": { - "description": "The organization street address", - "type": "string", - "maxLength": 60 - }, - "city": { - "description": "The organization city", - "type": "string", - "maxLength": 45 - }, - "region": { - "description": "The organization region (state)", - "type": "string", - "maxLength": 45 - }, - "country": { - "description": "The organization country ISO Alpha-2 code", - "type": "string", - "pattern": "^[A-Z]{2}$" - }, - "postalCode": { - "description": "The organization postal code", - "type": "string", - "maxLength": 10 - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "Payment": { - "type": "object", - "required": [ - "websiteId", - "customerId", - "currency", - "amount" - ], - "properties": { - "id": { - "description": "The payment identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "websiteId": { - "description": "The website identifier string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "The customer identifier string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "currency": { - "description": "The payment currency ISO Alpha code", - "type": "string" - }, - "amount": { - "description": "The payment amount", - "type": "integer", - "format": "double" - }, - "scheduledTime": { - "description": "The time the payment is scheduled for collection", - "type": "string", - "format": "date-time" - }, - "invoiceIds": { - "description": "The array of invoice identifiers", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResourceId" - } - }, - "description": { - "description": "The payment description", - "type": "string", - "maxLength": 255 - }, - "retryInstruction": { - "$ref": "#/components/schemas/PaymentRetry" - }, - "retryNumber": { - "readOnly": true, - "description": "The position in the sequence of retries", - "type": "integer" - }, - "retriedPaymentId": { - "readOnly": true, - "description": "The retried payment ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "paymentInstrument": { - "$ref": "#/components/schemas/PaymentInstrument" - }, - "billingAddress": { - "description": "Billing Address", - "allOf": [ - { - "$ref": "#/components/schemas/ContactObject" - } - ] - }, - "createdBy": { - "description": "The process that created this payment", - "type": "string" - }, - "updatedBy": { - "description": "The process that updated this payment", - "type": "string" - }, - "status": { - "description": "Payment status", - "type": "string", - "readOnly": true, - "enum": [ - "scheduled", - "queued", - "in-progress", - "incomplete", - "waiting-gateway", - "suspended", - "completed" - ] - }, - "result": { - "description": "Payment result", - "type": "string", - "readOnly": true, - "enum": [ - "approved", - "declined", - "canceled", - "unknown" - ] - }, - "riskMetadata": { - "description": "Risk metadata", - "allOf": [ - { - "$ref": "#/components/schemas/RiskMetadata" - } - ] - }, - "createdTime": { - "description": "Payment created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Payment updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 4, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/WebsiteLink" - }, - { - "$ref": "#/components/schemas/TransactionLink" - }, - { - "$ref": "#/components/schemas/ApprovalUrlLink" - }, - { - "$ref": "#/components/schemas/LeadSourceLink" - } - ] - } - } - } - }, - "PaymentCard": { - "type": "object", - "properties": { - "id": { - "description": "The card identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "The Customer's ID. Required if card is creating not from Token", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "pan": { - "description": "The card PAN (Primary Account Number). Required if card is creating not from Token", - "type": "string" - }, - "bin": { - "description": "The card's bin (the PAN's first 6 digits)", - "type": "string", - "format": "bin", - "readOnly": true - }, - "last4": { - "description": "The PAN's last 4 digits", - "type": "string", - "readOnly": true - }, - "expYear": { - "description": "Card's expiry year. Required if card is creating not from Token", - "type": "integer" - }, - "expMonth": { - "description": "Card's expiry month. Required if card is creating not from Token", - "type": "integer" - }, - "cvv": { - "description": "Card's cvv (card verification value). Required if card is creating not from Token", - "type": "string" - }, - "billingAddress": { - "description": "The Billing Address. Required if card is creating not from Token", - "allOf": [ - { - "$ref": "#/components/schemas/ContactObject" - } - ] - }, - "token": { - "description": "PaymentCardToken. Use without any other fields", - "type": "string" - }, - "safeHash": { - "description": "The card's hash. Based on bin and last 4 digits of the PAN", - "type": "string", - "readOnly": true - }, - "status": { - "description": "Payment Card status", - "type": "string", - "readOnly": true, - "enum": [ - "active", - "expired", - "inactive", - "deactivated", - "pending" - ] - }, - "brand": { - "description": "Payment Card brand", - "type": "string", - "readOnly": true, - "enum": [ - "Visa", - "MasterCard", - "American Express", - "Discover", - "Maestro", - "Solo", - "Electron", - "JCB", - "Voyager", - "Diners Club", - "Switch", - "Laser", - "China UnionPay" - ] - }, - "bankCountry": { - "description": "Payment Card bank country", - "type": "string", - "readOnly": true - }, - "bankName": { - "description": "Payment Card bank name", - "type": "string", - "readOnly": true - }, - "createdTime": { - "description": "Card created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Card updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 3, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/CustomerLink" - }, - { - "$ref": "#/components/schemas/BillingContactLink" - } - ] - } - } - } - }, - "PaymentCardMigrationRequest": { - "type": "object", - "required": [ - "fromGatewayAccountId", - "toGatewayAccountId", - "paymentCardIds" - ], - "properties": { - "fromGatewayAccountId": { - "description": "An ID of Gateway Account cards should be migrated from", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "toGatewayAccountId": { - "description": "An ID of Gateway Account cards should be migrated to", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "paymentCardIds": { - "type": "array", - "minItems": 1, - "items": { - "description": "An array of payment card IDs", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - } - } - } - }, - "PaymentCardMigrationResponse": { - "type": "object", - "properties": { - "migratedCards": { - "type": "integer", - "description": "Amount of cards that were successfully migrated" - } - } - }, - "PaymentInstrument": { - "type": "object", - "required": [ - "method" - ], - "discriminator": { - "propertyName": "method" - }, - "properties": { - "method": { - "$ref": "#/components/schemas/Method" - } - } - }, - "ach": { - "description": "ACH payment instrument object", - "allOf": [ - { - "$ref": "#/components/schemas/PaymentInstrument" - }, - { - "type": "object", - "required": [ - "bankAccountId" - ], - "properties": { - "bankAccountId": { - "description": "The bank account identifier string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "gatewayAccountId": { - "description": "The payment gateway identifier string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - } - } - } - ] - }, - "cash": { - "description": "Cash payment instrument object", - "allOf": [ - { - "$ref": "#/components/schemas/PaymentInstrument" - }, - { - "type": "object", - "properties": { - "receivedBy": { - "description": "The receiver's name", - "type": "string" - } - } - } - ] - }, - "payment-card": { - "description": "Payment card payment instrument object", - "allOf": [ - { - "$ref": "#/components/schemas/PaymentInstrument" - }, - { - "type": "object", - "required": [ - "paymentCardId" - ], - "properties": { - "paymentCardId": { - "description": "The payment card identifier string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "gatewayAccountId": { - "description": "The payment gateway identifier string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - } - } - } - ] - }, - "paypal": { - "description": "PayPal payment instrument object", - "allOf": [ - { - "$ref": "#/components/schemas/PaymentInstrument" - }, - { - "type": "object", - "required": [ - "payPalAccountId" - ], - "properties": { - "payPalAccountId": { - "description": "The PayPal account identifier string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "gatewayAccountId": { - "description": "The payment gateway identifier string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - } - } - } - ] - }, - "AmountAdjustment": { - "type": "object", - "discriminator": { - "propertyName": "method" - }, - "properties": { - "method": { - "type": "string", - "enum": [ - "none", - "partial", - "discount" - ] - } - }, - "required": [ - "method" - ] - }, - "PaymentRetry": { - "type": "object", - "properties": { - "attempts": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "properties": { - "scheduleInstruction": { - "$ref": "#/components/schemas/CommonScheduleInstruction" - }, - "paymentInstruction": { - "$ref": "#/components/schemas/AmountAdjustment" - } - }, - "required": [ - "scheduleInstruction", - "paymentInstruction" - ] - } - }, - "afterAttemptPolicy": { - "description": "The policy on the attempt finishes", - "type": "string", - "enum": [ - "none", - "change-subscription-renewal-time" - ] - }, - "afterRetryEndPolicy": { - "description": "The policy on the retry ends", - "type": "string", - "enum": [ - "none", - "cancel-subscription" - ] - } - }, - "required": [ - "attempts", - "afterAttemptPolicy", - "afterRetryEndPolicy" - ] - }, - "discount": { - "allOf": [ - { - "$ref": "#/components/schemas/AmountAdjustment" - }, - { - "type": "object", - "properties": { - "value": { - "description": "The payment amount discount", - "type": "number", - "format": "float" - }, - "type": { - "description": "The payment amount discount type", - "type": "string", - "enum": [ - "percent", - "fixed" - ] - } - }, - "required": [ - "value", - "type" - ] - } - ] - }, - "partial": { - "allOf": [ - { - "$ref": "#/components/schemas/AmountAdjustment" - }, - { - "type": "object", - "properties": { - "value": { - "description": "The payment amount", - "type": "number", - "format": "float" - }, - "type": { - "description": "The payment amount type", - "type": "string", - "enum": [ - "percent", - "fixed" - ] - } - }, - "required": [ - "value", - "type" - ] - } - ] - }, - "PaymentToken": { - "type": "object", - "required": [ - "method", - "paymentInstrument" - ], - "properties": { - "id": { - "description": "The token identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "method": { - "$ref": "#/components/schemas/Method" - }, - "paymentInstrument": { - "$ref": "#/components/schemas/PaymentTokenInstrument" - }, - "fingerprint": { - "description": "Device fingerprint hash", - "type": "string" - }, - "billingAddress": { - "description": "The Address. Required if bank account is not created from Token", - "allOf": [ - { - "$ref": "#/components/schemas/ContactObject" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "PaymentTokenInstrument": { - "type": "object", - "description": "Payment Token instrument object", - "properties": { - "pan": { - "description": "The card PAN (Primary Account Number)", - "type": "string" - }, - "expMonth": { - "description": "Card's expiry month", - "type": "integer" - }, - "expYear": { - "description": "Card's expiry year", - "type": "integer" - }, - "cvv": { - "description": "The CVV/CVC of the payment card", - "type": "string" - }, - "routingNumber": { - "description": "Routing Number", - "type": "integer" - }, - "accountNumber": { - "description": "AccountNumber", - "type": "integer" - }, - "accountType": { - "description": "Account Type", - "type": "string" - }, - "bankName": { - "description": "Bank name", - "type": "string" - } - } - }, - "PayPalAccount": { - "type": "object", - "properties": { - "id": { - "description": "The PayPal identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "The Customer's ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "billingAddress": { - "description": "The Customer's Billing Address.", - "allOf": [ - { - "$ref": "#/components/schemas/ContactObject" - } - ] - }, - "username": { - "description": "PayPal username.", - "type": "string" - }, - "status": { - "description": "PayPal Account status", - "type": "string", - "readOnly": true, - "enum": [ - "inactive", - "active", - "deactivated" - ] - }, - "createdTime": { - "description": "PayPal Account created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "PayPal Account updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 4, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/CustomerLink" - }, - { - "$ref": "#/components/schemas/ContactLink" - }, - { - "$ref": "#/components/schemas/ApprovalUrlLink" - } - ] - } - } - }, - "required": [ - "customerId", - "billingAddress" - ] - }, - "Plan": { - "type": "object", - "required": [ - "name", - "currency" - ], - "properties": { - "id": { - "description": "The website identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "name": { - "description": "The plan name", - "type": "string" - }, - "currency": { - "description": "Currency (three letter ISO 4217 code)", - "type": "string" - }, - "currencySign": { - "description": "Currency sign", - "type": "string" - }, - "isActive": { - "description": "If the plan is not active, customers cannot subscribe to the plan (default to true)", - "type": "boolean" - }, - "description": { - "description": "The plan description", - "type": "string" - }, - "richDescription": { - "description": "The plan rich description - supports HTML", - "type": "string" - }, - "recurringAmount": { - "description": "The amount that recurs according to the schedule", - "type": "number", - "format": "double" - }, - "recurringPeriodUnit": { - "description": "The unit of time", - "type": "string", - "enum": [ - "day", - "week", - "month", - "year" - ] - }, - "recurringPeriodLength": { - "description": "The length of time (used with the recurringPeriodUnit)", - "type": "integer" - }, - "trialAmount": { - "description": "The amount of a trial - 0 is a valid value (for free)", - "type": "number", - "format": "double" - }, - "trialPeriodUnit": { - "description": "The unit of time", - "type": "string", - "enum": [ - "day", - "week", - "month", - "year" - ] - }, - "trialPeriodLength": { - "description": "The length of time (used with the trialPeriodUnit)", - "type": "integer" - }, - "setupAmount": { - "description": "The amount of a trial - 0 is a valid value (for free)", - "type": "number", - "format": "double" - }, - "expiredTime": { - "description": "Time when the plan is not longer valid", - "type": "string", - "format": "date-time" - }, - "contractTermUnit": { - "description": "The unit of time", - "type": "string", - "enum": [ - "day", - "week", - "month", - "year" - ] - }, - "contractTermLength": { - "description": "The length that corresponds with the contractTermUnit", - "type": "integer" - }, - "recurringPeriodLimit": { - "description": "The number of times a subscription will rebill until the contract is over", - "type": "integer" - }, - "minQuantity": { - "description": "Minimum quantity per order, defaults to 1", - "type": "integer" - }, - "maxQuantity": { - "description": "Maximum quantity per order (NULL if no maximum)", - "type": "integer" - }, - "createdTime": { - "description": "Plan created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Plan updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "PriceBasedShippingRate": { - "type": "object", - "required": [ - "name", - "currency", - "price" - ], - "properties": { - "name": { - "description": "The shipping rate name", - "type": "string", - "maxLength": 255 - }, - "minOrderSubtotal": { - "description": "Minimum order subtotal for which this shipping rate is applicable, defaults to 0.00", - "type": "number", - "format": "double", - "default": 0 - }, - "maxOrderSubtotal": { - "description": "Maximum order subtotal for which this shipping rate is applicable (NULL if no maximum)", - "type": "number", - "format": "double" - }, - "price": { - "description": "The shipping price - 0 is a valid value (for free)", - "type": "number", - "format": "double" - }, - "currency": { - "description": "Currency (three letter ISO 4217 code)", - "type": "string" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "Product": { - "type": "object", - "required": [ - "name" - ], - "description": "Your product includes digital goods, services, and physical goods.\nProducts appear on invoice line items. If you set a tax category identifier,\ntaxes will be calculated upon invoice generation.\n", - "example": "{\n \"id\": \"stringid\",\n \"name\": \"Widget\",\n \"description\": \"Fantastic widget\",\n \"taxCategoryId\": null,\n \"requiresShipping\": true,\n \"accountingCode\": \"100\",\n \"customFields\": [],\n \"createdTime\": \"2015-08-27 13:45:12\",\n \"updatedTime\": \"2015-08-27 13:45:12\",\n \"_links\": [\n {\n \"rel\": \"self\",\n \"href\": \"https://api.rebilly.com/v2.1/products/stringid\"\n }\n ]\n}\n", - "properties": { - "id": { - "description": "The product identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "name": { - "description": "The product name", - "type": "string", - "maxLength": 255 - }, - "description": { - "description": "The product description", - "type": "string", - "maxLength": 512 - }, - "taxCategoryId": { - "description": "The product's tax category identifier string", - "type": "string", - "enum": [ - 99999, - 20010, - 40030, - 51020, - 51010, - 31000, - 30070 - ] - }, - "requiresShipping": { - "description": "If the product requires shipping, shipping calculations will be applied", - "type": "boolean" - }, - "accountingCode": { - "description": "The product accounting code", - "type": "string" - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "createdTime": { - "description": "The product created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "The product updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "Profile": { - "type": "object", - "properties": { - "id": { - "description": "The user identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "email": { - "description": "The user email", - "readOnly": true, - "type": "string", - "format": "email", - "maxLength": 100 - }, - "firstName": { - "description": "User's first name", - "readOnly": true, - "type": "string" - }, - "lastName": { - "description": "User's last name", - "readOnly": true, - "type": "string" - }, - "businessPhone": { - "description": "The user business phone number", - "readOnly": true, - "type": "string" - }, - "mobilePhone": { - "description": "The user mobile phone number", - "readOnly": true, - "type": "string" - }, - "availableCurrencies": { - "type": "array", - "description": "An array of reporting currencies enabled for the merchant", - "readOnly": true, - "items": { - "type": "string" - } - }, - "reportingCurrency": { - "description": "The user's ISO Alpha-3 code used for reports", - "type": "string" - }, - "totpRequired": { - "description": "The user setting of two-factor authentication", - "readOnly": true, - "type": "boolean" - }, - "totpSecret": { - "description": "The user TOTP key for authentication app (if TOTP enabled)", - "readOnly": true, - "type": "string" - }, - "totpUrl": { - "description": "The user link to QR-code for TOTP authentication app (if TOTP enabled)", - "readOnly": true, - "type": "string", - "format": "url" - }, - "country": { - "description": "The user country setting - two letter code", - "readOnly": true, - "type": "string" - }, - "preferences": { - "description": "User preferences like timezone, language and many more. This is an object with custom properties.", - "type": "object" - } - } - }, - "ResetPassword": { - "type": "object", - "required": [ - "newPassword" - ], - "properties": { - "newPassword": { - "description": "New password", - "type": "string", - "format": "password" - } - } - }, - "ResetPasswordToken": { - "type": "object", - "required": [ - "username", - "password" - ], - "properties": { - "token": { - "description": "The token's identifier string", - "type": "string", - "readOnly": true - }, - "username": { - "description": "The token's username", - "type": "string" - }, - "password": { - "description": "Token's password (only for POST)", - "type": "string", - "format": "password" - }, - "credential": { - "description": "Token's credential ID", - "type": "string" - }, - "expiredTime": { - "description": "Password expired time", - "type": "string", - "format": "date-time" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "ResourceCustomFields": { - "description": "\"Custom Fields list as a map `{\"custom field name\": \"custom field value\", ...}\"`.\nThe format must follow the saved format (see Custom Fields section for the formats).\n", - "type": "object" - }, - "ResourceId": { - "type": "string", - "description": "The resource ID. Defaults to UUID v4", - "maxLength": 50, - "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21" - }, - "RiskMetadata": { - "type": "object", - "properties": { - "ipAddress": { - "description": "The customer's IP", - "type": "string", - "format": "ipv4" - }, - "isProxy": { - "description": "True if customer's ip address is related to proxy", - "type": "boolean", - "readOnly": true - }, - "isVpn": { - "description": "True if customer's ip address is related to VPN", - "type": "boolean", - "readOnly": true - }, - "isTor": { - "description": "True if customer's ip address is related to TOR", - "type": "boolean", - "readOnly": true - }, - "isHosting": { - "description": "True if customer's ip address is related to hosting", - "type": "boolean", - "readOnly": true - }, - "vpnServiceName": { - "description": "VPN service name, if available", - "type": "string", - "readOnly": true - }, - "isp": { - "description": "Internet Service Provider name, if available", - "type": "string", - "readOnly": true - }, - "country": { - "description": "Country ISO Alpha-2 code for specified ipAddress", - "maxLength": 2, - "type": "string", - "readOnly": true, - "example": "US" - }, - "city": { - "description": "City for specified ipAddress", - "type": "string", - "readOnly": true, - "example": "New York" - }, - "latitude": { - "description": "Latitude for specified ipAddress", - "type": "number", - "format": "double", - "readOnly": true - }, - "longitude": { - "description": "Longitude for specified ipAddress", - "type": "number", - "format": "double", - "readOnly": true - }, - "postalCode": { - "description": "Postal code for specified ipAddress", - "type": "string", - "maxLength": 10, - "readOnly": true - }, - "timeZone": { - "description": "Time zone for specified ipAddress", - "type": "string", - "readOnly": true, - "example": "America/New_York" - }, - "accuracyRadius": { - "description": "Accuracy radius for specified ipAddress (kilometers)", - "type": "integer", - "readOnly": true - }, - "fingerprint": { - "description": "The fingerprint", - "type": "string" - }, - "httpHeaders": { - "description": "HTTP headers", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "example": { - "User-Agent": "Mozilla/5.0", - "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" - } - } - } - }, - "add-risk-score": { - "allOf": [ - { - "$ref": "#/components/schemas/RuleAction" - }, - { - "type": "object", - "description": "Add risk score", - "properties": { - "score": { - "type": "integer", - "default": 0 - } - } - } - ] - }, - "blacklist": { - "description": "Add customer data to blacklist", - "allOf": [ - { - "$ref": "#/components/schemas/RuleAction" - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "customer-id", - "email", - "fingerprint", - "ip-address", - "payment-card-id" - ] - }, - "ttl": { - "type": "integer", - "description": "Blacklist TTL. Defaults to zero, meaning blacklist record won't expire ever.", - "default": 0 - } - }, - "required": [ - "type" - ] - } - ] - }, - "cancel-scheduled-payments": { - "description": "", - "allOf": [ - { - "$ref": "#/components/schemas/RuleAction" - } - ] - }, - "guess-payment-card-expiration": { - "description": "", - "allOf": [ - { - "$ref": "#/components/schemas/RuleAction" - } - ] - }, - "pick-gateway-account": { - "description": "", - "allOf": [ - { - "$ref": "#/components/schemas/RuleAction" - }, - { - "type": "object", - "properties": { - "pickInstruction": { - "$ref": "#/components/schemas/GatewayAccountPickInstruction" - } - }, - "required": [ - "pickInstruction" - ] - } - ] - }, - "schedule-payment-retry": { - "description": "", - "allOf": [ - { - "$ref": "#/components/schemas/RuleAction" - }, - { - "$ref": "#/components/schemas/PaymentRetry" - } - ] - }, - "schedule-payment": { - "description": "", - "allOf": [ - { - "$ref": "#/components/schemas/RuleAction" - }, - { - "type": "object", - "description": "The calculation instruction of scheduled time for payment", - "properties": { - "scheduleInstruction": { - "$ref": "#/components/schemas/CommonScheduleInstruction" - }, - "amountPolicy": { - "type": "string", - "enum": [ - "balance-outstanding", - "invoice-total" - ] - } - }, - "required": [ - "scheduleInstruction", - "amountPolicy" - ] - } - ] - }, - "send-email": { - "description": "", - "allOf": [ - { - "$ref": "#/components/schemas/RuleAction" - }, - { - "$ref": "#/components/schemas/EmailNotification" - } - ] - }, - "stop-subscriptions": { - "description": "Stop active subscriptions", - "allOf": [ - { - "$ref": "#/components/schemas/RuleAction" - } - ] - }, - "trigger-webhook": { - "description": "", - "allOf": [ - { - "$ref": "#/components/schemas/RuleAction" - }, - { - "$ref": "#/components/schemas/Webhook" - } - ] - }, - "SendPreviewWebhook": { - "description": "Trigger a test webhook", - "allOf": [ - { - "$ref": "#/components/schemas/Webhook" - } - ] - }, - "SendTestEmail": { - "description": "Send a test email", - "allOf": [ - { - "$ref": "#/components/schemas/EmailNotification" - } - ] - }, - "EmailNotification": { - "type": "object", - "properties": { - "credentialHash": { - "type": "string", - "description": "SMTP Credential identifier string." - }, - "sender": { - "type": "string", - "description": "The sender address. The template palceholders are allowed." - }, - "recipients": { - "type": "array", - "description": "The recipients addresses. The template palceholders are allowed.", - "minItems": 1, - "items": { - "type": "string" - } - }, - "cc": { - "type": "array", - "description": "The recipients addresses. The template palceholders are allowed.", - "items": { - "type": "string" - } - }, - "bcc": { - "type": "array", - "description": "The hidden recipients addresses. The template palceholders are allowed.", - "items": { - "type": "string" - } - }, - "subject": { - "type": "string", - "description": "The message subject. The template palceholders are allowed." - }, - "bodyText": { - "type": "string", - "description": "Leave empty to use text from \"bodyHtml\" without tags.\nThe template palceholders are allowed.\n" - }, - "bodyHtml": { - "type": "string", - "description": "Leave empty to receive \"text/plain\" email.\nThe template palceholders are allowed.\n" - } - }, - "required": [ - "credentialHash", - "sender", - "recipients", - "subject", - "bodyText", - "bodyHtml" - ] - }, - "GatewayAccountPickInstruction": { - "type": "object", - "discriminator": { - "propertyName": "method" - }, - "properties": { - "method": { - "type": "string", - "enum": [ - "gateway-account-weights", - "gateway-acquirer-weights" - ] - } - }, - "required": [ - "method" - ] - }, - "gateway-account-weights": { - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccountPickInstruction" - }, - { - "type": "object", - "properties": { - "weightedList": { - "type": "array", - "uniqueItems": true, - "minimum": 0, - "items": { - "type": "object", - "properties": { - "gatewayAccountId": { - "$ref": "#/components/schemas/ResourceId" - }, - "weight": { - "type": "integer" - } - }, - "required": [ - "gatewayAccountId", - "weight" - ] - }, - "example": "[\n {\"gatewayAccountId\": \"my_gateway_account_1\", \"weight\": 80},\n {\"gatewayAccountId\": \"my_gateway_account_2\", \"weight\": 20}\n]\n" - } - }, - "required": [ - "weightedList" - ] - } - ] - }, - "gateway-acquirer-weights": { - "allOf": [ - { - "$ref": "#/components/schemas/GatewayAccountPickInstruction" - }, - { - "type": "object", - "properties": { - "weightedList": { - "type": "array", - "uniqueItems": true, - "minimum": 0, - "items": { - "type": "object", - "properties": { - "gatewayName": { - "$ref": "#/components/schemas/GatewayName" - }, - "acquirerName": { - "$ref": "#/components/schemas/AcquirerName" - }, - "weight": { - "type": "integer" - } - }, - "required": [ - "gatewayName", - "acquirerName", - "weight" - ] - }, - "example": "[\n {\"gatewayName\": \"RebillyProcessor\", \"acquirerName\": \"AIB\", \"weight\": 80},\n {\"gatewayName\": \"RebillyProcessor\", \"acquirerName\": \"B+S\", \"weight\": 20}\n" - } - }, - "required": [ - "weightedList" - ] - } - ] - }, - "Rule": { - "type": "object", - "description": "The rule", - "properties": { - "name": { - "type": "string" - }, - "status": { - "$ref": "#/components/schemas/OnOff" - }, - "final": { - "description": "Whether rule is final, meaning stop further matching rules if this is matched", - "type": "boolean", - "default": true - }, - "criteria": { - "$ref": "#/components/schemas/Condition" - }, - "actions": { - "type": "array", - "uniqueItems": true, - "items": { - "$ref": "#/components/schemas/RuleAction" - } - } - }, - "required": [ - "name", - "actions" - ] - }, - "RuleAction": { - "type": "object", - "discriminator": { - "propertyName": "name" - }, - "properties": { - "name": { - "type": "string", - "description": "The action name", - "enum": [ - "blacklist", - "cancel-scheduled-payments", - "guess-payment-card-expiration", - "pick-gateway-account", - "schedule-payment-retry", - "schedule-payment", - "send-email", - "trigger-webhook", - "stop-subscriptions", - "add-risk-score" - ] - }, - "status": { - "$ref": "#/components/schemas/OnOff" - } - }, - "required": [ - "name" - ] - }, - "RuleSet": { - "type": "object", - "description": "Set of rules for particular event", - "properties": { - "version": { - "type": "integer", - "readOnly": true - }, - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Rule" - } - }, - "updatedTime": { - "$ref": "#/components/schemas/ServerTimestamp" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - }, - "required": [ - "rules" - ] - }, - "RuleSetHistoryItem": { - "type": "object", - "description": "Version of rules", - "readOnly": true, - "properties": { - "version": { - "type": "integer" - }, - "createdTime": { - "$ref": "#/components/schemas/ServerTimestamp" - }, - "_links": { - "type": "array", - "description": "The links related to a resource", - "readOnly": true, - "minItems": 2, - "maxItems": 2, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/RuleSetVersionLink" - } - ] - } - } - } - }, - "RuleSetVersion": { - "type": "object", - "description": "Version of rules", - "readOnly": true, - "properties": { - "version": { - "type": "integer" - }, - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Rule" - } - }, - "createdTime": { - "$ref": "#/components/schemas/ServerTimestamp" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "Webhook": { - "type": "object", - "properties": { - "method": { - "type": "string", - "enum": [ - "GET", - "POST", - "PUT", - "PATCH", - "DELETE" - ] - }, - "url": { - "type": "string", - "format": "uri" - }, - "query": { - "type": "object", - "description": "The URI parameters", - "additionalProperties": { - "type": "string", - "example": { - "param1": "value1", - "param2": "value2" - } - } - }, - "body": { - "type": "string" - }, - "credentialHash": { - "type": "string", - "description": "Webhook Credential identifier string." - }, - "headers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookHeader" - } - } - }, - "required": [ - "method", - "url" - ] - }, - "WebhookHeader": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "status": { - "$ref": "#/components/schemas/OnOff" - }, - "value": { - "type": "string", - "example": { - "Header1": "value1", - "Header2": "value2;value3" - } - } - }, - "required": [ - "name", - "value" - ] - }, - "CommonScheduleInstruction": { - "type": "object", - "description": "The calculation instruction of scheduled time", - "discriminator": { - "propertyName": "method" - }, - "properties": { - "method": { - "type": "string", - "enum": [ - "auto", - "immediately", - "date-interval", - "day-of-month", - "day-of-week" - ] - } - }, - "required": [ - "method" - ] - }, - "CustomEventScheduleInstruction": { - "type": "object", - "description": "The calculation instruction of scheduled time", - "discriminator": { - "propertyName": "method" - }, - "properties": { - "method": { - "type": "string", - "enum": [ - "date-interval", - "day-of-month", - "day-of-week" - ] - } - }, - "required": [ - "method" - ] - }, - "DayOfWeek": { - "type": "string", - "enum": [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ] - }, - "auto": { - "allOf": [ - { - "$ref": "#/components/schemas/CommonScheduleInstruction" - } - ] - }, - "date-interval": { - "allOf": [ - { - "$ref": "#/components/schemas/CommonScheduleInstruction" - }, - { - "$ref": "#/components/schemas/CustomEventScheduleInstruction" - }, - { - "type": "object", - "properties": { - "duration": { - "type": "integer", - "description": "The number of the units", - "minimum": 1 - }, - "unit": { - "$ref": "#/components/schemas/TimeUnit" - } - }, - "required": [ - "duration", - "unit" - ] - } - ] - }, - "day-of-month": { - "allOf": [ - { - "$ref": "#/components/schemas/CommonScheduleInstruction" - }, - { - "$ref": "#/components/schemas/CustomEventScheduleInstruction" - }, - { - "type": "object", - "properties": { - "day": { - "type": "integer", - "minimum": 1, - "maximum": 31, - "description": "The day of the month when event will be scheduled.\nBe aware if the month has less days,\nthe last day of the month will be selected.\n" - }, - "time": { - "$ref": "#/components/schemas/Time" - } - }, - "required": [ - "day" - ] - } - ] - }, - "day-of-week": { - "allOf": [ - { - "$ref": "#/components/schemas/CommonScheduleInstruction" - }, - { - "$ref": "#/components/schemas/CustomEventScheduleInstruction" - }, - { - "type": "object", - "properties": { - "day": { - "$ref": "#/components/schemas/DayOfWeek" - }, - "week": { - "type": "string", - "default": "next", - "enum": [ - "next", - "first-in-month", - "last-in-month" - ] - }, - "time": { - "$ref": "#/components/schemas/Time" - } - }, - "required": [ - "day" - ] - } - ] - }, - "immediately": { - "allOf": [ - { - "$ref": "#/components/schemas/CommonScheduleInstruction" - } - ] - }, - "Time": { - "type": "string", - "format": "date-time", - "pattern": "^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](Z(\\+|\\-)([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9])?$" - }, - "TimeUnit": { - "type": "string", - "enum": [ - "second", - "seconds", - "minute", - "minutes", - "hour", - "hours", - "day", - "days", - "month", - "months", - "year", - "years" - ] - }, - "ServerTimestamp": { - "type": "string", - "description": "Read-only timestamp, automatically assigned on back-end.", - "format": "date-time", - "readOnly": true - }, - "Session": { - "type": "object", - "required": [ - "permissions" - ], - "properties": { - "id": { - "description": "The session identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "token": { - "description": "The session's token used for authentication", - "type": "string" - }, - "permissions": { - "description": "The session's permissions. See the format in example", - "allOf": [ - { - "$ref": "#/components/schemas/UserPermissions" - } - ] - }, - "userId": { - "description": "The user identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "createdTime": { - "description": "Session created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Session updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "expiredTime": { - "description": "Session expired time. Defaults to one hour", - "type": "string", - "format": "date-time" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "ShippingZone": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "id": { - "description": "The shipping zone identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "name": { - "description": "The shipping zone name", - "type": "string", - "maxLength": 255 - }, - "countries": { - "description": "Countries covered by the shipping zone. A country can only belong to one shipping zone (no overlapping).\nThis property can be empty or null to create a default shipping zone for countries that were not specified in other zones.\n", - "type": "array", - "items": { - "description": "Country ISO Alpha-2 code", - "type": "string", - "pattern": "^[A-Z]{2}$" - } - }, - "rates": { - "description": "Price-based shipping rate instructions", - "type": "array", - "items": { - "description": "Price based shipping rate instruction", - "allOf": [ - { - "$ref": "#/components/schemas/PriceBasedShippingRate" - } - ] - } - }, - "isDefault": { - "description": "Is this Shipping Zone default", - "readOnly": true - }, - "createdTime": { - "description": "The shipping zone created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "The shipping zone updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "Signin": { - "type": "object", - "required": [ - "email", - "password" - ], - "properties": { - "email": { - "description": "Email", - "type": "string" - }, - "password": { - "description": "Password", - "type": "string", - "format": "password" - }, - "expiredTime": { - "description": "Session expired time. Defaults to one hour", - "type": "string", - "format": "date-time" - } - } - }, - "Signup": { - "type": "object", - "required": [ - "email", - "company", - "firstName", - "lastName", - "businessPhone", - "password", - "website" - ], - "properties": { - "email": { - "description": "The user email", - "type": "string", - "format": "email", - "maxLength": 100 - }, - "company": { - "description": "The user's company name", - "type": "string" - }, - "firstName": { - "description": "The user first name", - "type": "string" - }, - "lastName": { - "description": "The user last name", - "type": "string" - }, - "businessPhone": { - "description": "The user business phone number", - "type": "string" - }, - "password": { - "description": "The user password", - "type": "string", - "format": "password" - }, - "website": { - "description": "The user's website address", - "type": "string" - }, - "currencies": { - "description": "An array of currencies codes", - "type": "array", - "default": [ - "USD" - ], - "items": { - "description": "3 letters ISO 4217 currency code", - "type": "string" - } - }, - "merchantCategoryCode": { - "description": "Merchant category code. Defaults to \"Computer Software Stores\"", - "type": "integer", - "default": 5734 - } - } - }, - "Status": { - "type": "object", - "properties": { - "status": { - "description": "The API status. If everything is ok - value is 'ok'", - "type": "string", - "readOnly": true, - "enum": [ - "ok" - ] - }, - "time": { - "description": "Current time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - } - } - }, - "Subscription": { - "type": "object", - "required": [ - "customerId", - "planId", - "websiteId" - ], - "properties": { - "id": { - "description": "The Subscription identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "Unique id for each customer", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "planId": { - "description": "Unique id for each plan", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "websiteId": { - "description": "Unique id for each website", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "initialInvoiceId": { - "description": "Unique id for the initial invoice", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "deliveryAddress": { - "description": "Delivery address", - "allOf": [ - { - "$ref": "#/components/schemas/ContactObject" - } - ] - }, - "billingAddress": { - "description": "Billing address", - "allOf": [ - { - "$ref": "#/components/schemas/ContactObject" - } - ] - }, - "status": { - "description": "Subscription status", - "type": "string", - "readOnly": true - }, - "quantity": { - "description": "Quantity for each subscription. Default value to 1", - "type": "integer" - }, - "autopay": { - "description": "Autopay determines if a payment attempt will be automatic", - "type": "boolean", - "default": true - }, - "inTrial": { - "description": "True if the subscription is currently in a trial period", - "type": "boolean", - "readOnly": true - }, - "rebillNumber": { - "description": "The current period number", - "type": "integer", - "readOnly": true - }, - "canceledBy": { - "description": "Canceled by", - "type": "string", - "readOnly": true, - "enum": [ - "merchant", - "customer", - "rebilly" - ] - }, - "cancelCategory": { - "description": "Cancel category", - "type": "string", - "readOnly": true, - "enum": [ - "billing-failure", - "did-not-use", - "did-not-want", - "missing-features", - "bugs-or-problems", - "do-not-remember", - "risk-warning", - "contract-expired", - "too-expensive", - "never-started", - "switched-plan", - "other" - ] - }, - "cancelDescription": { - "description": "Cancel reason description in free form", - "type": "string", - "readOnly": true, - "maxLength": 255 - }, - "riskMetadata": { - "description": "Risk metadata", - "allOf": [ - { - "$ref": "#/components/schemas/RiskMetadata" - } - ] - }, - "startTime": { - "description": "Subscription start time", - "type": "string", - "format": "date-time" - }, - "activationTime": { - "description": "Subscription activation time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "endTime": { - "description": "Subscription end time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "renewalTime": { - "description": "Subscription renewal time", - "type": "string", - "format": "date-time" - }, - "canceledTime": { - "description": "Subscription canceled time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "createdTime": { - "description": "Subscription created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Subscription updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 6, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/CustomerLink" - }, - { - "$ref": "#/components/schemas/PlanLink" - }, - { - "$ref": "#/components/schemas/WebsiteLink" - }, - { - "$ref": "#/components/schemas/BillingContactLink" - }, - { - "$ref": "#/components/schemas/DeliveryContactLink" - }, - { - "$ref": "#/components/schemas/LeadSourceLink" - } - ] - } - } - } - }, - "SubscriptionCancel": { - "type": "object", - "required": [ - "policy", - "canceledBy", - "cancelCategory" - ], - "properties": { - "policy": { - "description": "Cancel policy", - "type": "string", - "enum": [ - "at-next-renewal", - "now-with-prorata-credit", - "now" - ] - }, - "canceledBy": { - "description": "Canceled by", - "type": "string", - "enum": [ - "merchant", - "customer" - ] - }, - "cancelCategory": { - "description": "Cancel category", - "type": "string", - "enum": [ - "did-not-use", - "did-not-want", - "missing-features", - "bugs-or-problems", - "do-not-remember", - "risk-warning", - "contract-expired", - "too-expensive", - "other" - ] - }, - "cancelDescription": { - "description": "Cancel reason description in free form", - "type": "string", - "maxLength": 255 - } - } - }, - "SubscriptionSwitch": { - "type": "object", - "required": [ - "planId", - "policy" - ], - "properties": { - "planId": { - "description": "The plan identifier string", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "policy": { - "description": "Switch policy", - "type": "string", - "enum": [ - "at-next-renewal", - "now-with-prorata-credit", - "now" - ] - }, - "websiteId": { - "description": "The website's ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "quantity": { - "description": "Quantity for each subscription. Default value to 1", - "type": "integer" - } - } - }, - "TaxCategory": { - "type": "object", - "properties": { - "id": { - "description": "The tax category identifier string", - "type": "string", - "readOnly": true, - "maxLength": 50, - "enum": [ - 99999, - 20010, - 40030, - 51020, - 51010, - 31000, - 30070 - ] - }, - "description": { - "description": "The tax category description", - "type": "string", - "maxLength": 512 - }, - "taxProvider": { - "description": "The tax category maps to a provider", - "type": "string", - "enum": [ - "tax-jar" - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "ThreeDSecure": { - "type": "object", - "required": [ - "enrolled", - "enrollmentEci", - "customerId", - "gatewayAccountId", - "paymentCardId", - "websiteId", - "currency", - "amount" - ], - "properties": { - "id": { - "description": "The 3D Secure entry identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "customerId": { - "description": "Related customer ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "gatewayAccountId": { - "description": "Related gateway account ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "paymentCardId": { - "description": "Related payment card ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "websiteId": { - "description": "Related Website ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "enrolled": { - "description": "Is the cardholder enrolled in 3DSecure", - "type": "string", - "enum": [ - "Y", - "N", - "U" - ] - }, - "enrollmentEci": { - "description": "The 3D Secure entry enrollment eci", - "type": "string" - }, - "eci": { - "description": "The 3D Secure entry electronic commerce indicator", - "type": "integer" - }, - "cavv": { - "description": "The 3D Secure entry cardholder authentication verification value", - "type": "string" - }, - "xid": { - "description": "The 3D Secure entry transaction Id", - "type": "string" - }, - "payerAuthResponseStatus": { - "description": "The 3D Secure entry Auth Response Status", - "type": "string", - "enum": [ - "Y", - "N", - "U", - "A" - ] - }, - "signatureVerification": { - "description": "If signature was verified", - "type": "string", - "enum": [ - "Y", - "N" - ] - }, - "amount": { - "description": "Transaction amount", - "type": "number", - "format": "double" - }, - "currency": { - "description": "The currency three letter code", - "type": "string" - }, - "createdTime": { - "description": "The 3D Secure entry created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "ApiTracking": { - "type": "object", - "description": "Tracking API Requests.", - "readOnly": true, - "properties": { - "id": { - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "status": { - "type": "integer", - "description": "HTTP response code" - }, - "url": { - "type": "string", - "description": "API request address" - }, - "method": { - "type": "string", - "description": "HTTP method", - "enum": [ - "HEAD", - "GET", - "POST", - "PUT", - "DELETE", - "PATCH" - ] - }, - "request": { - "type": "string", - "description": "Request JSON-string" - }, - "response": { - "type": "string", - "description": "Response JSON-string" - }, - "requestHeaders": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "example": { - "User-Agent": "Mozilla/5.0", - "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" - } - }, - "responseHeaders": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "example": { - "Rate-Limit-Limit": 5000, - "Rate-Limit-Remaining": 4999, - "Rate-Limit-Reset": "Mon, 31 Jul 2017 04:16:00 +0000" - } - }, - "user": { - "type": "object", - "description": "The user who has made a request", - "readOnly": true, - "properties": { - "userId": { - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "apiKeyId": { - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "email": { - "description": "The user email", - "type": "string", - "format": "email" - }, - "firstName": { - "description": "The user first name", - "type": "string" - }, - "lastName": { - "description": "The user last name", - "type": "string" - }, - "ipAddress": { - "type": "string", - "description": "Client IP address", - "format": "ipv4" - }, - "userAgent": { - "description": "The software that is acting on behalf of a user", - "type": "string" - }, - "fingerprint": { - "description": "The user device fingerprint hash", - "type": "string" - }, - "isSupport": { - "description": "If user from support", - "type": "boolean" - } - } - }, - "duration": { - "type": "integer", - "description": "Request duration in milliseconds" - }, - "createdTime": { - "description": "The log created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "SubscriptionTracking": { - "type": "object", - "description": "Tracking subscription log", - "readOnly": true, - "properties": { - "id": { - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "subscriptionId": { - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "invoiceItemId": { - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "result": { - "type": "string", - "description": "Subscription's result", - "enum": [ - "created", - "postponed", - "stopped", - "error" - ] - }, - "message": { - "type": "string", - "description": "It contains the transaction number and renewal time" - }, - "createdTime": { - "description": "The log created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "WebhookTracking": { - "type": "object", - "description": "Webhook Tracking Requests.", - "readOnly": true, - "properties": { - "id": { - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "eventType": { - "$ref": "#/components/schemas/EventType" - }, - "url": { - "type": "string", - "description": "Url where webhook was sent" - }, - "method": { - "type": "string", - "description": "HTTP method which was used to send webhook", - "example": "POST" - }, - "headers": { - "type": "object", - "description": "HTTP headers which were used to send webhook", - "additionalProperties": { - "type": "string" - }, - "example": { - "My-Header": "Cool-Value" - } - }, - "responseCode": { - "type": "integer", - "description": "HTTP code response" - }, - "responseBody": { - "type": "string", - "description": "Response body received" - }, - "payload": { - "type": "object", - "description": "Event's data information" - }, - "sentTime": { - "description": "Sent time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "initiatedTime": { - "description": "Initiated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "createdTime": { - "description": "The log created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "WebsiteWebhookTracking": { - "type": "object", - "description": "Webhook Tracking Requests.", - "readOnly": true, - "properties": { - "id": { - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "websiteId": { - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "eventName": { - "type": "string", - "description": "Event name for which webhook was called" - }, - "status": { - "type": "string", - "description": "Event's status", - "enum": [ - "fail", - "success" - ] - }, - "response": { - "type": "integer", - "description": "HTTP code response" - }, - "pushData": { - "type": "string", - "description": "Event's data information JSON-string" - }, - "sentTime": { - "description": "Sent time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "nextSendTime": { - "description": "Next send time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "createdTime": { - "description": "The log created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "TransactionGatewayLog": { - "type": "object", - "readOnly": true, - "properties": { - "headers": { - "description": "The request headers", - "type": "array", - "items": { - "type": "string" - } - }, - "url": { - "description": "The request URL", - "type": "string" - }, - "request": { - "description": "The request body", - "type": "string" - }, - "response": { - "description": "The response body", - "type": "string" - }, - "duration": { - "description": "The request time, msec", - "type": "integer" - }, - "createdTime": { - "description": "The log entry created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/TransactionLink" - } - } - } - }, - "TransactionRefund": { - "type": "object", - "required": [ - "amount" - ], - "properties": { - "amount": { - "description": "Refund amount", - "type": "number", - "format": "double" - } - } - }, - "RedirectUrls": { - "type": "object", - "description": "The redirect URIs", - "required": [ - "error", - "success", - "decline", - "cancel" - ], - "properties": { - "error": { - "type": "string", - "format": "url" - }, - "success": { - "type": "string", - "format": "url" - }, - "decline": { - "type": "string", - "format": "url" - }, - "cancel": { - "type": "string", - "format": "url" - } - } - }, - "ThreeDSecureResult": { - "type": "object", - "readOnly": true, - "required": [ - "enrolled", - "authenticated", - "liability" - ], - "properties": { - "enrolled": { - "description": "Is the cardholder enrolled in 3D Secure", - "type": "string", - "enum": [ - "yes", - "no", - "invalid card/timeout", - "unavailable" - ] - }, - "authenticated": { - "description": "The 3D Secure entry Auth Response Status", - "type": "string", - "enum": [ - "yes", - "no", - "not applicable", - "attempted" - ] - }, - "liability": { - "type": "string", - "enum": [ - "protected", - "not protected", - "protected (attempt)" - ] - } - } - }, - "Transaction": { - "type": "object", - "properties": { - "id": { - "description": "The transaction identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "type": { - "description": "Transaction type", - "type": "string", - "readOnly": true, - "enum": [ - "authorize", - "capture", - "credit", - "refund", - "sale", - "void" - ] - }, - "status": { - "description": "Transaction status", - "type": "string", - "readOnly": true, - "enum": [ - "completed", - "connection-error", - "never-sent", - "pending", - "sending", - "suspended", - "timeout", - "waiting-capture", - "waiting-refund" - ] - }, - "result": { - "description": "Transaction result", - "type": "string", - "readOnly": true, - "enum": [ - "approved", - "canceled", - "declined", - "unknown" - ] - }, - "amount": { - "description": "The transactions's amount", - "type": "number", - "format": "double", - "readOnly": true - }, - "currency": { - "description": "The transactions's currency", - "type": "string", - "readOnly": true - }, - "parentTransactionId": { - "description": "The transactions's parent ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ], - "readOnly": true - }, - "childTransactions": { - "description": "The child transaction IDs", - "readOnly": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/ResourceId" - } - }, - "invoiceIds": { - "description": "The invoice IDs related to transaction", - "readOnly": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/ResourceId" - } - }, - "subscriptionIds": { - "description": "The subscription IDs related to transaction", - "readOnly": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/ResourceId" - } - }, - "isRebill": { - "type": "boolean", - "readOnly": true - }, - "rebillNumber": { - "description": "The transactions's rebill number", - "type": "integer", - "readOnly": true - }, - "gatewayAccountId": { - "description": "The transactions's Gateway Account ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ], - "readOnly": true - }, - "gatewayTransactionId": { - "description": "The gateway's transaction ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ], - "readOnly": true - }, - "gateway": { - "type": "object", - "description": "The related gateway information", - "readOnly": true, - "properties": { - "response": { - "description": "The gateway's response", - "type": "object", - "properties": { - "code": { - "description": "The gateway's response code", - "type": "string" - }, - "message": { - "description": "The gateway's response message", - "type": "string" - }, - "type": { - "description": "The gateway's response type", - "type": "string" - }, - "originalCode": { - "description": "The raw, unmapped gateway's response code", - "type": "string" - }, - "originalMessage": { - "description": "The raw, unmapped gateway's response message", - "type": "string" - } - } - }, - "avsResponse": { - "description": "The AVS gateway's response", - "type": "object", - "properties": { - "code": { - "description": "The raw response code", - "type": "string" - }, - "message": { - "description": "The raw response message", - "type": "string" - } - } - }, - "cvvResponse": { - "description": "The CVV gateway's response", - "type": "object", - "properties": { - "code": { - "description": "The raw response code", - "type": "string" - }, - "message": { - "description": "The raw response message", - "type": "string" - } - } - } - } - }, - "gatewayName": { - "description": "Payment Gateway name, available only when transaction use gateway, else null", - "type": "string", - "readOnly": true - }, - "acquirerName": { - "description": "Acquirer name, available only when transaction use gateway, else null", - "type": "string", - "readOnly": true - }, - "websiteId": { - "description": "Website's ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ], - "readOnly": true - }, - "customerId": { - "description": "Customer's ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ], - "readOnly": true - }, - "method": { - "description": "Payment Method", - "allOf": [ - { - "$ref": "#/components/schemas/Method" - } - ] - }, - "velocity": { - "description": "The number of transactions by the same customer in the past 24 hours", - "type": "number", - "format": "integer" - }, - "bin": { - "description": "Payment Card BIN", - "type": "string", - "format": "bin", - "readOnly": true - }, - "paymentInstrument": { - "$ref": "#/components/schemas/PaymentInstrument" - }, - "billingAddress": { - "description": "Billing Address", - "allOf": [ - { - "$ref": "#/components/schemas/ContactObject" - } - ] - }, - "has3ds": { - "type": "boolean", - "readOnly": true - }, - "3ds": { - "allOf": [ - { - "$ref": "#/components/schemas/ThreeDSecureResult" - } - ] - }, - "hasDcc": { - "description": "True if transaction has Dynamic Currency Conversion applied", - "type": "boolean", - "readOnly": true - }, - "dcc": { - "description": "Dynamic Currency Conversion detailed information. Null if hasDcc is false", - "type": "object", - "readOnly": true, - "properties": { - "base": { - "type": "object", - "description": "Initial amount and currency to convert from", - "properties": { - "amount": { - "type": "number", - "format": "double" - }, - "currency": { - "type": "string" - } - } - }, - "quote": { - "type": "object", - "description": "Suggested amount and currency to convert to", - "properties": { - "amount": { - "type": "number", - "format": "double" - }, - "currency": { - "type": "string" - } - } - }, - "usdMarkup": { - "description": "The amount of markup translated to USD", - "type": "number", - "format": "double" - }, - "outcome": { - "type": "string", - "description": "Dynamic Currency Conversion outcome", - "enum": [ - "rejected", - "selected", - "unknown" - ] - } - } - }, - "riskScore": { - "description": "The transactions's risk score", - "type": "number", - "format": "integer", - "readOnly": true - }, - "riskMetadata": { - "description": "Risk metadata", - "allOf": [ - { - "$ref": "#/components/schemas/RiskMetadata" - } - ] - }, - "redirectUrls": { - "$ref": "#/components/schemas/RedirectUrls" - }, - "retryInstruction": { - "$ref": "#/components/schemas/PaymentRetry" - }, - "retryNumber": { - "type": "integer", - "readOnly": true, - "description": "The position in the sequence of retries" - }, - "retriedTransactionId": { - "readOnly": true, - "description": "The retried transaction ID", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "description": { - "type": "string", - "description": "The payment description", - "maxLength": 255 - }, - "isDisputed": { - "description": "True if transaction is disputed", - "type": "boolean", - "readOnly": true - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "scheduledTime": { - "type": "string", - "description": "The time the transaction is scheduled for collection", - "format": "date-time" - }, - "processedTime": { - "description": "Transaction processed time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "createdTime": { - "description": "Transaction created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Transaction updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 13, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/GatewayAccountLink" - }, - { - "$ref": "#/components/schemas/CustomerLink" - }, - { - "$ref": "#/components/schemas/WebsiteLink" - }, - { - "$ref": "#/components/schemas/PaymentCardLink" - }, - { - "$ref": "#/components/schemas/ParentTransactionLink" - }, - { - "$ref": "#/components/schemas/RetriedTransactionLink" - }, - { - "$ref": "#/components/schemas/BillingContactLink" - }, - { - "$ref": "#/components/schemas/LeadSourceLink" - }, - { - "$ref": "#/components/schemas/ApprovalUrlLink" - }, - { - "$ref": "#/components/schemas/CancelUrlLink" - }, - { - "$ref": "#/components/schemas/RefundUrlLink" - }, - { - "$ref": "#/components/schemas/DisputeLink" - } - ] - } - } - } - }, - "UpdatePassword": { - "type": "object", - "properties": { - "currentPassword": { - "description": "Current user's password - used when requesting password change", - "type": "string", - "format": "password" - }, - "newPassword": { - "description": "New user's password - used when requesting password change", - "type": "string", - "format": "password" - } - } - }, - "User": { - "type": "object", - "required": [ - "email", - "firstName", - "lastName" - ], - "properties": { - "id": { - "description": "The user identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "email": { - "description": "The user email", - "type": "string", - "format": "email", - "maxLength": 100 - }, - "firstName": { - "description": "User's first name", - "type": "string" - }, - "lastName": { - "description": "User's last name", - "type": "string" - }, - "businessPhone": { - "description": "The user business phone number", - "type": "string" - }, - "mobilePhone": { - "description": "The user mobile phone number", - "type": "string" - }, - "password": { - "description": "User's password. If not provided, password reset email will be sent", - "type": "string", - "format": "password" - }, - "permissions": { - "description": "The user's permissions. See the format in example", - "allOf": [ - { - "$ref": "#/components/schemas/UserPermissions" - } - ] - }, - "createdTime": { - "description": "The user created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "The user updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "loginTime": { - "description": "The user last login time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "reportingCurrency": { - "description": "The user's ISO Alpha-3 code used for reports", - "type": "string" - }, - "availableCurrencies": { - "type": "array", - "description": "An array of reporting currencies enabled for the merchant", - "readOnly": true, - "items": { - "type": "string" - } - }, - "totpRequired": { - "description": "The user setting of two-factor authentication", - "type": "boolean" - }, - "totpSecret": { - "description": "The user TOTP key for authentication app (if TOTP enabled)", - "type": "string" - }, - "totpUrl": { - "description": "The user link to QR-code for TOTP authentication app (if TOTP enabled)", - "type": "string", - "format": "url" - }, - "status": { - "description": "The user status", - "type": "string", - "enum": [ - "active", - "inactive", - "pending-confirmation" - ], - "readOnly": true - }, - "country": { - "description": "The user country setting - two letter code", - "type": "string" - }, - "preferences": { - "description": "User preferences like timezone, language and many more. This is an object with custom properties.", - "type": "object" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 1, - "items": { - "$ref": "#/components/schemas/SelfLink" - } - } - } - }, - "UserPermissions": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "properties": { - "resourceName": { - "type": "string", - "enum": [ - "3dsecure", - "api-keys", - "api-tracking", - "authentication-options", - "authentication-tokens", - "bank-accounts", - "blacklists", - "checkout-pages", - "contacts", - "coupons", - "coupons-redemptions", - "credentials", - "custom-events", - "custom-fields", - "customers", - "disputes", - "events", - "gateway-accounts", - "invoices", - "layouts", - "lead-sources", - "lists", - "matched-rules", - "notes", - "oct-batch", - "organizations", - "password-tokens", - "payments", - "payment-cards", - "payment-cards-migrations", - "paypal-accounts", - "plans", - "reports", - "reset-sandbox", - "rulesets", - "sessions", - "subscriptions", - "subscription-tracking", - "tokens", - "transactions", - "users", - "webhook", - "webhook-tracking", - "websites" - ] - }, - "methods": { - "type": "array", - "minItems": 1, - "items": { - "type": "string", - "enum": [ - "HEAD", - "GET", - "POST", - "PUT", - "DELETE", - "PATCH" - ] - } - }, - "resourceIds": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResourceId" - } - } - } - }, - "example": [ - { - "resourceName": "plans", - "methods": [ - "GET", - "POST", - "PUT", - "HEAD", - "DELETE" - ] - }, - { - "resourceName": "invoices", - "methods": [ - "GET", - "HEAD" - ], - "resourceIds": [ - "4f6cf35x-2c4y-483z-a0a9-158621f77a21", - "1586f35x-4f6c-483z-a0a9-2c4y21f77a21" - ] - }, - { - "resourceName": null, - "methods": null, - "resourceIds": null - } - ] - }, - "WebhookAuthorization": { - "type": "object", - "discriminator": { - "propertyName": "type" - }, - "properties": { - "type": { - "type": "string", - "description": "The authorization type", - "enum": [ - "none", - "basic", - "digest", - "oauth1" - ], - "default": "none" - } - }, - "required": [ - "type" - ] - }, - "basic": { - "allOf": [ - { - "$ref": "#/components/schemas/WebhookAuthorization" - }, - { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "password": { - "type": "string", - "format": "password" - } - }, - "required": [ - "username", - "password" - ] - } - ] - }, - "digest": { - "allOf": [ - { - "$ref": "#/components/schemas/WebhookAuthorization" - }, - { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "password": { - "type": "string", - "format": "password" - } - }, - "required": [ - "username", - "password" - ] - } - ] - }, - "oauth1": { - "allOf": [ - { - "$ref": "#/components/schemas/WebhookAuthorization" - }, - { - "type": "object", - "properties": { - "consumerKey": { - "type": "string" - }, - "consumerSecret": { - "type": "string" - }, - "token": { - "type": "string" - }, - "tokenSecret": { - "type": "string" - } - }, - "required": [ - "consumerKey", - "consumerSecret", - "token", - "tokenSecret" - ] - } - ] - }, - "WebhookCredential": { - "type": "object", - "description": "Webhook credential", - "properties": { - "hash": { - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "host": { - "type": "string", - "description": "The host name" - }, - "auth": { - "$ref": "#/components/schemas/WebhookAuthorization" - } - }, - "required": [ - "host" - ] - }, - "Website": { - "type": "object", - "required": [ - "name", - "url", - "servicePhone", - "serviceEmail" - ], - "properties": { - "id": { - "description": "The website identifier string", - "readOnly": true, - "allOf": [ - { - "$ref": "#/components/schemas/ResourceId" - } - ] - }, - "name": { - "description": "The website's name", - "type": "string" - }, - "url": { - "description": "The website's domain address", - "type": "string" - }, - "servicePhone": { - "description": "The website's customer service phone number", - "type": "string" - }, - "serviceEmail": { - "description": "The website's customer service email address", - "type": "string", - "format": "email" - }, - "checkoutPageUri": { - "description": "Your own custom URI for this Checkout Page", - "type": "string" - }, - "createdTime": { - "description": "Website created time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "updatedTime": { - "description": "Website updated time", - "allOf": [ - { - "$ref": "#/components/schemas/ServerTimestamp" - } - ] - }, - "customFields": { - "$ref": "#/components/schemas/ResourceCustomFields" - }, - "_links": { - "type": "array", - "description": "The links related to resource", - "readOnly": true, - "minItems": 1, - "maxItems": 2, - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SelfLink" - }, - { - "$ref": "#/components/schemas/NotesLink" - } - ] - } - } - } - }, - "WebsiteWebhook": { - "type": "object", - "required": [ - "webHookUrl", - "webHookUsername", - "webHookPassword" - ], - "properties": { - "webHookUrl": { - "description": "Webhook Url", - "type": "string" - }, - "webHookUsername": { - "description": "Webhook HTTP Authentication Username", - "type": "string" - }, - "webHookPassword": { - "description": "Webhook HTTP Authentication Password. An empty string will be returned in the response", - "type": "string" - } - } - } - }, - "responses": { - "AccessForbidden": { - "description": "Access forbidden, invalid API-KEY was used", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "NotFound": { - "description": "Resource was not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "Conflict": { - "description": "Conflict", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "InvalidDataError": { - "description": "Invalid data was sent", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidError" - } - } - } - } - }, - "parameters": { - "resourceId": { - "name": "id", - "in": "path", - "description": "The resource identifier string", - "required": true, - "schema": { - "type": "string" - } - }, - "collectionLimit": { - "name": "limit", - "in": "query", - "description": "The collection items limit", - "schema": { - "type": "integer", - "minimum": 0, - "maximum": 1000 - } - }, - "collectionOffset": { - "name": "offset", - "in": "query", - "description": "The collection items offset", - "schema": { - "type": "integer", - "minimum": 0 - } - }, - "collectionFilter": { - "name": "filter", - "in": "query", - "description": "The collection items filter requires a special format.\nUse \",\" for multiple allowed values. Use \";\" for multiple fields.\nSee the filter guide for more options and examples about this format.\n", - "schema": { - "type": "string" - } - }, - "collectionQuery": { - "name": "q", - "in": "query", - "description": "The partial search of the text fields.", - "schema": { - "type": "string" - } - }, - "collectionCriteria": { - "name": "criteria", - "in": "query", - "description": "The json criteria for collection", - "schema": { - "type": "string" - } - }, - "collectionSort": { - "name": "sort", - "in": "query", - "description": "The collection items sort field and order (prefix with \"-\" for descending sort).", - "style": "form", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "collectionFields": { - "name": "fields", - "in": "query", - "description": "Limit the returned fields to the list specified, separated by comma. Note that id is always returned.", - "schema": { - "type": "string" - } - }, - "collectionExpand": { - "name": "expand", - "in": "query", - "description": "Expand response to get full related object instead of ID. See the expand guide for more info.", - "schema": { - "type": "string" - } - }, - "systemEventType": { - "name": "eventType", - "in": "path", - "description": "The event type", - "required": true, - "schema": { - "type": "string" - } - }, - "rulesVersion": { - "name": "version", - "in": "path", - "required": true, - "description": "The rule set version. Expand response to get full related object instead of ID. See the expand guide for more info.", - "schema": { - "type": "integer", - "minimum": 1 - } - }, - "hash": { - "name": "hash", - "in": "path", - "description": "The token identifier string", - "required": true, - "schema": { - "type": "string" - } - }, - "mediaType": { - "name": "Accept", - "in": "header", - "description": "The response media type", - "schema": { - "type": "string", - "enum": [ - "application/json" - ], - "default": "application/json" - } - } - }, - "requestBodies": { - "ApiKey": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiKey" - } - } - }, - "description": "ApiKey resource", - "required": true - }, - "Attachment": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Attachment" - } - } - }, - "description": "Attachment resource", - "required": true - }, - "BankAccount": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BankAccount" - } - } - }, - "description": "BankAccount resource", - "required": true - }, - "Blacklist": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Blacklist" - } - } - }, - "description": "Blacklist resource", - "required": true - }, - "CheckoutPage": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CheckoutPage" - } - } - }, - "description": "Checkout Page resource", - "required": true - }, - "Contact": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Contact" - } - } - }, - "description": "Contact resource", - "required": true - }, - "Coupon": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Coupon" - } - } - }, - "description": "Coupon resource", - "required": true - }, - "Credential": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Credential" - } - } - }, - "description": "Credential resource", - "required": true - }, - "CustomEvent": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomEvent" - } - } - }, - "description": "Custom event resource", - "required": true - }, - "RuleSet": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleSet" - } - } - }, - "description": "Set of rules resource", - "required": true - }, - "Customer": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Customer" - } - } - }, - "description": "Customer resource", - "required": true - }, - "LeadSource": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LeadSource" - } - } - }, - "description": "Lead Source resource", - "required": true - }, - "Dispute": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dispute" - } - } - }, - "description": "Dispute resource", - "required": true - }, - "GatewayAccount": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GatewayAccount" - } - } - }, - "description": "Gateway Account resource", - "required": true - }, - "Invoice": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Invoice" - } - } - }, - "description": "Invoice resource", - "required": true - }, - "Layout": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Layout" - } - } - }, - "description": "Layout resource", - "required": true - }, - "List": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/List" - } - } - }, - "description": "List resource", - "required": true - }, - "Note": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Note" - } - } - }, - "description": "Note resource", - "required": true - }, - "Organization": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Organization" - } - } - }, - "description": "Organization resource", - "required": true - }, - "Payment": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Payment" - } - } - }, - "description": "Payment resource", - "required": true - }, - "Plan": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Plan" - } - } - }, - "description": "Plan resource", - "required": true - }, - "GlobalWebhook": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GlobalWebhook" - } - } - }, - "description": "Webhook resource", - "required": true - }, - "Product": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Product" - } - } - }, - "description": "Product resource", - "required": true - }, - "UpdatePassword": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdatePassword" - } - } - }, - "description": "currentPassword and newPassword", - "required": true - }, - "Subscription": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Subscription" - } - } - }, - "description": "Subscription resource", - "required": true - }, - "PaymentToken": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentToken" - } - } - }, - "description": "PaymentToken resource", - "required": true - }, - "User": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - }, - "description": "User resource", - "required": true - }, - "Website": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Website" - } - } - }, - "description": "Website resource", - "required": true - } - }, - "securitySchemes": { - "ApiKey": { - "description": "When you sign up for an account, you are given your first API key.\nTo do so please follow this link: https://www.rebilly.com/site/signup/\nAlso you can generate additional API keys, and delete API keys (as you may\nneed to rotate your keys in the future).\n", - "name": "REB-APIKEY", - "type": "apiKey", - "in": "header" - }, - "JWT": { - "description": "You can create a JSON Web Token (JWT) via our Sessions resource.\n", - "type": "http", - "scheme": "basic" - }, - "RebAuth": { - "description": "Only for the Tokens resource.\nThe REB-AUTH value is created in this way\nGenerate a Nonce (random string), and a Timestamp (unix timestamp)\nConcatenate the values of ApiUser, Nonce, and Timestamp (in that order).\nUse that value as the input data when you calculate the HMAC-SHA1 with your secret key, called the signature.\nForming the four data points into a JSON object.\n\n```json\n{\n \"REB-APIUSER\": \"abcdefg\",\n \"REB-NONCE\": \"adfsjtreitou345fgkdafgj\",\n \"REB-TIMESTAMP\": \"1382591345\",\n \"REB-SIGNATURE\": \"a234fc95460401cfg09c9d09\"\n}\n```\n\nThen base64 encode that JSON object. This is the final value of the REB-AUTH HTTP header\n", - "name": "REB-AUTH", - "type": "apiKey", - "in": "header" - } - } - } -} diff --git a/demo/code-samples-demo.gif b/demo/code-samples-demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6836eb0954442a2307643d291395c4913a1452a GIT binary patch literal 909418 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�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≶VW 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%0Dybo{G?`sO%QXmLNWOOmElag>O~=ZwJ+uJY+xI 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�uOkR5)EEJ%!}dG>)<>zuO6M=|K@bh(x22~3 z>!#QLj=f*}S^N1s*oz8a=~N`pL}0QEr|)onkPQTPM$U?wV+VOAsC4>KE{wmn%jzS7kB=ddGnyzJd}Pi;?RT`{v|T z?-t2^7^CVD>k((jyBnoG7OOiZ^j74l9#@>PMx3cfoOwc=Wlfy*Se)%)oIUKNBiBo3 zjhC(-FWnPfde*%39((C~_|iWt5MyE&-$6ba{33^pHp}q^UwZtJq-0Z;{%e=`01+KV z_1J(hW>`YlaA^X3F+uG-L6#yhB`zV`Bk_$#VxhSHgCeg>nev6C?zbT!(h?ATLLykr zM{`S=@e_F!wT0uB>7Pu#cqzJnI~Y$VH(gD4WK1r(hlFHRsTHh)Ll>;ZK}`W}wlY{^ z;;f|6jgIac0G&NaDj%_-dT@tsGR$Hj9<7EJ4gkt%fJBKL>;RQTKot-V#!%}@MTl$w zwC9seZ(Hi}8{NxQgZWO7vNM8a4%F^qb8~C`BMiz8Kv%geh?bRsi`Q@iPq0%8_IJYv z|LA@~sshqxIRu1}NO3VS{S#0A2>sxMl+77>s&&p^vidZ!1roqXPJo2U&q0t64na6T z2m@r15CL>bh6}3kmKi%CL*=~{sRMiMUM5QhBv>Alq5WM}77bC@ga~Xx z#4YJ_vn}byNeL1#!2xO!t|Dm>qpzvP;_mrmgxm3e zOdSnD3IQyMxw55i^h&MH)zwNob3DcY|3pyWZ^Nm;gp_jfvE0{QVOcfCFFM5{`r6>^ zbEzVpP~|kfw`FF`#YWz(|9mEv6&=-EHm{e&b}RQP}&-YTM?l)FHDTzhgy zN_7wHe2r>rRXaabMt1s=Qu*5WRT9M&OvT*^!%WKSN~niW)wl{6q-Q2Lwk zK126_rm%=Y2su{LA6!f^p?)8$z2W*Q+rwqj(9U0yX)i42`yoV{1_4C_t5Ohk1E@TZ z4$rQT4uE=orhn87k#|V7_?_``JRkPG+*{I+P8G`TkW=yw(U$gz5>rb@s7DyC@>8u4ITO?5qjm|8_+A%o`>E5-LA z(x{x+5Ck-!rcu-CX?Km%gFQB_lE0f?n4`uoDb)Fm+t@9ju4$n@_ePjZH2tW|ix$K5 zf))^_tOTD|Sp?Qt;^tv}XYi`4P3873(Io3oBzRhAsL)bULyq?le9Z`ea1=I#L4+hMW z!&)&!0g$Ba*%p6o9>(r1tx1zXU{I@GSHw~Fp5@VdkQUj2W)1j9AyYo2Leurz??N&3 zd;9+ZZa|U06tO!nvnAlFr7;8_YmPkN0vhX>1Cf+#^boWJu_D`!PkWejW1>`v|Fm?I z15E3wLLjjv@S4F>Z66!7eG@l+_Y-550e?p~b6Xl4%SOEf03%D9=OLU7;uanou{2u( zd;1mz0JIZ(mKZu6GmDcH>n}`814bZ|i0h|a>jL!}5(cW8rvjY{+p+_|o?jERP5ZPo zkfD3gosCNa%g7uN%K(h)0(-%@G!V8Ld$xg+j6AVx+{J^Uhj_}NivC4PpBEtvAOV3n z06QR>V3h;qn5aeIyx0g4Mq7?$s;oL$lbE`s6zKy+prm;!yqzVe<9n7xaF&AFqVZ8z z7L~O}3XbA95Fl%nM4+scHMh6asvXw_9M&`vX8g1U*2JmP(GH`I1fRs>-n>5A3u=0Ig@M9L_7Q^ox_m zN)W5Xfs{s+MxmEiYQb$p0Oe@GJ8ZTC!33o1!bb1|4spCro2;Q3nuKMINPLx^3ao}g ztTHJCKA@;~D-Z(-q)9BB4>6Q15vS^?yrbDX+RK_)O02Cq1kX#w>gX>=paf%^!7cy< z7P$jso2@@U#Aobj0-%wnvRZN5gSt3})#))PYqGvq6HXfd4B(+1DFC6VlMSoK(fPMD zz_6eTt^n$dpgWOF3c4amn!cx2quakqEU1J#N^UVUIN7o^PyjxQ|2#%Z13eJR*l5eN z8G-0Ip~-@cPK&+pnYT*Wus$HU77GAH(2hOOuuJftq}i|xAh``I${Q+{xa?!>I9tq0T+Id0&Y>KWyi6|xK*yOJx}EWzM+&-* z3|C<@5q^0V;VJ)cO8$$vt zli-V{u^EzE6*FOck@6A5?|2{|Ox6GZ#RkcmOnUuZ5=xo^L z*rZTAngEd4TTK8|+}JP^n~<#>zY5jsDF8vNgYu!(-ho>ESgmTkmrtFIm^}c;3)%2- z0YQA(-O<-R5FyHn+nv$Gxh%c45B zVS%$lEnriHlRB9yR0*X_QV~^Y)g4;R0Pq7YV3AbD$b?%jR5U_ZF@)>61n3B!;!%~@ zD;_5P$gVu8JD?L`3!N%=!YU3QAAM3>85EjpBf~=ye4-E$z(eY+umO#tqKuPn3?ELL z&?Y|O=S<~BkjvS0lXYyfCNL~IfgAzOU&{Q*Ut}U2egtL?l2l2!aEp>o8=8`fxsg}l z{N*E9E*}0#14Z!XRNam`h~lxEyu{qo7H$Gx%n~y}00C=zVEI^TIeHfWvfTUH0AK@+ zc^>VC)!Tu==Sb>$+@z+_)s()Lora*Q-VpIh|HTz~nD+75L4m)5xuwcs)Bl?&qh67R zEt0xTSd7hIsSR^MTanQyt+6nT!W$`YC# z6pmgP$o}i+&ZJ;$-0aE2xYX_f;i)>=s@pA+)ytvxjdRxi>$W`Y_dVvuE#q~3*R{cq z6P8T{oT$wnDUbb8nSucmNw@$I#5aAwtnFzR;He_%7|3nx0?S$?mxWFDSfqS#p6dfb z;Hg=O9udIEnUMg`jM5Zq#WPRyvYY@I5a80;%WmdX5^)wj9}yoV7Wy}fEls~M8PGkO z7CUgBd3tIUy2~^+rdJqS(Xa8EbNYy@#n(xgcPm|V>{AjxVklPb?FB2J%C68T!c_{LiJgSnno zYRsh%P-(==@)F624i{A)%$?Eo%p{+P&h#EC(&mF&5MW=EczZ*(8y+yL{CI&FVL!v>0 z2}=?Pxn$r#k|YWE$Pv<`$$|nhY`CDYCCLIA9$?r>v*b<_0|>Zi*wDq200~j@VCpm^ zgQfsNx>#9}qmhqHL}mqm6i7w}Lx2z=Ibev89s>es-1smfTmTr1xNu8!Cxizf=>DyE zf$M-0cZHf5VuZ-ym^>(I4C$k#SO!FAgcP`A?SKJ0Fz>{$AwvPcI`y7Lom%y3)~#K? zh8Y}&O~10Yb*_Uqggdm97*9Jj^*1sn&U!Gp$I00MXzsanxEMx)MwFc;2zH~p?A{~_wx1HntuJOJ$hS{C521Hg{tD&2PXp{WGOGoe1*0Bq_s z0F=Y4q5+%Z!G#2gdaH=!5PFLS8h#L}fD&k!h@=7S(~HD{c36Rf4@Fw+BaIs3P`ey1 zY$`$;4m0pPAr>>S!~uK&!n?gP5I{8yAQ-Jg;`9;#0~M3=VKL6MQ*N<>isOL?7auy# zAQvtiC`-Jkq;UWNlB3Eg1l`ie!WaQaz@P-2laQt!N#Y;_2vCdD1moOF?z)x;=q{>) z`gCqNir#u?O!~qqvq$5u+mA*DBAn2mJoh|JfF?00ayL;&CACyjPes*Kfl@u~vB%QV z$f$}2xBx2#3Tv>g|H!hkiwA>t$TGlL2^5bayBc&gR?~*9hyeoJN;3dw-O5Y2WJ#*5 zpt7h!YNmpEWx%wS30#9L-q9(q#uA7!bwdK;*R|3$ zq1(1v8u%lM23)r#Vhs|YgCvO}0Oy%XfG?=TGA8MQjN|N?;QJsw1x`0PAuv zYEj}A+&uIbfhd6p6ZOt%z!{Hwv31B9^~zbtm%zH8%XZ-b|6Ur z32GpT(IC^ja%#5^t*bk#cCrZqvroH80^BHkv~)NhWsrf7S{e}m4Yh1afD(9MV#^)BfSPcVQq85KdQa1b1zzB6yp8_S~I_t%5d;-Y91&E?2hgI)DZX>`8 zpmMvqy`@iuLR?FfgSWTrpgYtd$?aTMy6H4UfzW!$odh77Q0e7JHvtOSgg8VZ7O{w> zL1Ge>|G31`44_va`+>y@h!6qD1V$Dk*-Fad5GY#A2VlXCOrjW(mF$a&XKdn1#Ms3j zglkv>yJ8eG;;N@WaZy%eV-^z@M=w@|Az7>lQmCV>Ze4MXOr#22k_8v9Kv5>S8b}pk z1QC$UMI&3eBJ*gq#weo8jJOdE2a*_?(Ew(VU=avu6sfFX?a^XZbfZ=Hs1$?@=!yGF zN*0~SNiMdfD#pSivO1R-K1PHybb%OnG{S%<#&M9Y8rmtBkd!VmZ&>mA%ViuRy3KS3 zGj!3wO_T_+3~<1R=R{{Z)wxdBEKYKzW55nv5XJToFLZS30TABckSVIKDK2==dLH<+ z|F;mq2klvp;S~4I?a1dhso4&FTEc)OxIjHY3W5)u5S?aSDo87aPHlcxBfTkZM565i($6duNX$onXdRQIKAiqub-s?>2V zRVR`FF*OoElK9v;TGE!*v}e1Pe9XiZq8v*g(@KrA3gA_uq_#XO*$r4wvn|yS|G-(_ zqYW!>rmYzO_p~iJm_nF#8Unm+T&?kKb2Fuvo;)A|)b+{u!X{n4+|_EcMU8V&6J1jM zmbM1LzymndDd_BmykSf4dQT&o2Xyeb_r-61^=mHR$O$fgnh=TT^f=3+uPNA3ka>tg zp5eBJp^w{1ehN%j`b?NNk`qzn40K*~Hi}IgE>ML*tQrE}DSmyzKn650qLzTxzO1^_ zf#IY=7dYy`!ILOzcDI`y?__*85y1Hf3*dyrxHS+atf`RHL+m2yx%-83l%pI zCSs$BIFZGgz}F^jiL!};>`61b!1a>0evv$zY~R}3-v)PX(U`_@m)qRuMt8cE_+@ps z``qkCBfOI+Z@SRi-S;*nzL98eeRr9OvJQ8^1wQaQubSWoNBC=~oxOxN+~E(0c*G?> zaf(;m;uptw#x=fij(6PS9|w8JMLu$pm)zthM|sLszH*kg+~qHa|9Q-1K69Ga+~zmO zdCqlCaD(sM=RXH}(1kv9q8Huh5eN9Ud*1SeAKmFsNBMb|KDKRhZ@As=?U>7!w%1HO zHFxs5sB+_L?K+#sGd>iKOBb7}x2EZ~!TLI}o#Sc$j-7Fbdfro|$a5m`h+vFWX_LNR zzw2GkVK;o@6He{7*QV?;Z@l6qKlves1_BxgBFA$e0VW#}@hks4;A~; zd(`-_9qs2E`91h_(w36KON z$nO0TFo0j^Qh*#hvm!IHv{QM%a^trF^f!tSjLJeHsu80JQne*AlP`gf3A89-IwOR5 zmUXKL*FvKBLpP(4zzU?mSTex(GYS$MB_psjF)Kkt8iH^sz|yz?9@0060ipB*wH?|S zbYhO45Fg%q4J7!2GANZ9?3$L)8~RC`1Co$YaVLo>wyp!h+)^}CnUv@NkLoD^A6SC* z7?UHz6Xi%LkiwMM&>Ic7v;ztd>XHC+q74rTlw67s!_hCjd9l+-fbKw=!TTBxAPu}T zh}4s>+Q6y|z(H24F7zWJ1f;(J;Hab{fG?N=*&&rY|G5EViy2qJ0E?M0K5U6oLN(bq zrO*S8P(+mk3?17t2v>`ZUh#n)c*P@tMd*o*9q5SVI*kiB0<_SJ1T-$#c#0k{s9BUn zTs$rY#4@7LMQchY1`vRc5~^fu4V!2`QQ4|PWVI!uje4nE^z1;A~0wb1QE63Fs5NgXd0T_br{|FMKpn-)XN`*iYH?$4V8boY#w4T5T z_acHE_<=Bhf+!f29gs?@ECUqW0VyB?B}jrPfPyk001*!90RF5*Wga zr9~P{7dTA7yPU+_MTDp~UF^RifS`T3Oc!uKYynM-fkC)H#Q@;UjOZ>Nh|K4@Od^0m zlK9I{gp0s53eL19-;l*_@qs9LMKdaZ9Uubav?S?(#UfC%VPqE*xE%fHki#qpZ8DUg z;7z)SCq@&BcyfUph!W}&02dI=>Ecbu|9qOj6i(taoUCXrmcN&xw`$4T!AgIC( zChWlvaiJA)fy^t251Ek)8zOZ7kH>iS<=s;fgEVCiL@{^O%A{5QuHdrPN|$Ny--bA z5eI@DJM9qyU{Wrn96RL_I|ZGJ|Iiy2Y6&Gxr3m2>>Qd6``H)gmmj~^RJ_Q}^z??(< zkQv|!C9P5#V6rWZ)DOw95~$K6@F6L6fh+Bi2C7szE!5YLp#f?U>~Xg4LDfG6jojOf z6HKuuLQXD1sbN%OpsGC!m5b zpi0Q;oDYyhHJ}102!kYWg9?kpDPV&sVApJ|*7O0zQ)8G6@V88imA~|j2DGRsA{sKp zn0tYhgn_FGY@@f3q_c1rkvJr^KpBGqC`cNZAK1lv@l0LOR3C6oEh~uxWQ$k49^5j4 zkPyZrkSe)A2$zirBH*F`|GF7g#LbWOfuxwtZ?TwY3CWreqa$!mIZ6ltkVTN{0j8D3 zL19{#*$G*+S&ON$Sey_EP(i$$3dDi4kn9n6$rx}kkp#GxDCriasUx9k+ILYJ7>N=t z;zcV9&W4a%SriJYrKO!{jF-LH=rjRI@*=n*7}lU!_rV(<`q-_Fh-B13MdS_9AU|iF zw9ujr0?+^?(1J2>L`Nh7(S3^<*nub*-2jM!BoG57&@du!UDfR|02qP|K!P%$T>vP9 zZJiY%OoAv--6*JnBw&Na@x6h3CnV7Tc-066y3GQ?N28dOHexmx*sB-8-U(uWp#=gu z>^%hng0^5b#YzZI|C$H{(hetq3Trc{=va{fV78(9UX8#Uj+I~e%}xlR4rX(oMJa$5 z$=`f30>Ejm2q|D@JE;$oNcbqQ3jh#nvnbr*jtF5=4){_DV6>We2o9MDB2W)uAutej z3~L*R`jB6wsGI7M-%FVZjil6v#2HUQ$qR17FRdO#eTy9M9vKTEDwv{ML-%wMPaFzfK(0RZ6#(nr=nAi2>G=Y?SW zod|%UpPleQB$bUf*4#}qLI}VB49JOi+m9_sf^|GgdOHIo_<^$ofD4dB9M!t{^H)ON zO?CC%z-Yuj|JFbND4#RSjFs`rZz|-n9SDW32$`@XlvyrY6ss>AnBSzDkXcwB=qE3e zq}AjXoE4pp_{~r91{ainH*dWXH@k4=OQPk+ zNM&Q53SLpc7}Sc6NU7C)jA0(8U53w4N;eR|fN)YTy`1AoV?Pyx4JF`XM}!~n0hK#G zgEdG4i7pRu{DQjV2_f9wC=@~}z|rOc=^UMp+hWjidcyrcA>70)C8iGM7_@@uV1$5| zAfbsL|3$unkf8vBlJA%lW(1!s(a#+46zBK>+$n(Mz)V@WnbQHxWx%dm)=_)BM2`o+NWhNn@93bnYhP3Z0VwxzNovuea+nbj7Y2pa#7_O7I=By+8 zqq{kR&J%0KMryO}fsZVo*|-Tkf#ZeVGb3ym4$z?2I0G=yg0?FO44^+Y7=wQGZ7s0M zqKRa^P*;sE7H^hB`x^*Do zkR+OLt(G8VV{EOk?Zu_(NKBR`j5rxBxs4~nGIMShY9jEXtqBPyiI6DTsTuFoSa6as z8Ik~7mQ`=Z2-@_14F<>oE*c}L;N~cjadpYF*dTyAX1@@C?LGql_A5x+#%Sc;3D5#v zIVb}vC<8iR12;fq=@`e=8J{a}9K@+GbsWi)h8&e>C*T|YFairxjyKT=eB|IdIkfONARrjdLO1k~1QM2l9sQU`lEPk)|N4-{ zIiL+O^bqbr8jka@cHjUTfQj@0p&Cw52b=(y-rXym0gIkM{gpB~@|IYWRwu~F}v-2Jep^!AI#JtKKjUAwVgl5UKeI$(q~=3t9QxAe675-pS_pHwX04-@0a@ zU-0d{Z0~f3V3RYctg=~?twwzlm~5M25KRYFfczF2W|9a2vzlJ@x;~A&rmiPG4db8z z2?Dd}*i_V@)x=s40k9JU>Bz-@vPqf!+7EtW9sa~N2s*bc1mWyV{{jBk@WTPHkY4X} z2X2i`5fz4MR<+l!M5K)!_<$s!f@X)Bu!I7D2w-BMfG<8{FqcfB+Dn(0>8CbkP%EAVEe#0AL{AKm*)YMt=Yla9OreXhaYT>F5Gh79{|{4lHgK(M2mJwZlaP zlt9A|Nt#f^4?e00fB+a2sZmlTJXE3p99%%s1rfAl0)im4IOIk9T_hC`QVur2kw*An z5di{3iKmJ-ww0%rGPAQd^9>ZG0K0Oq z!wz#wR_vpZB1jOWUNyGTwd+Z6qI(A;oUp*0il8%{CO+s~Rbn+DvOr zQrTdOjnUkq0Wlh07lCE=XjoOe)7?<_{X^bNLwz^cJmv5c#lu;w_}D{O?YCMN*@ZRK zCs7{OT2a5f_EIzC^fXUraYYi>V0VpR=4S5=y5B^tMRw&=a(;W$r|TXzjdnXOH*G`@ z-TT>QT7CFvn_mRp1{YsWe8n7O0D;5TW1qeD+cS*8O24ib1r#tRkun)&92h_mq-kE(rh?_Ir%Jf?sGzPaXQghekva5|OAh2m+4=34L zx{U;T;DkfvCMiRq;0o2X5gzcshCyHe5d2i5r1+qTLIHvgOsJ6j(Qtw+ya)GrR}&{#Mhc3AT})BqtRnbDAkau5GCE@!Ar;4$_+T`U(g{Z7mxE)C5KuNWqXhFs zs>4KaTmxYM1BSB4yRhma4Df*$iO50%*a!$j00IReRmD@)#RZ)d!W{`9qbt$TjzvLX z4fD2y3$oEuF1Vw2Ch3A83^52{JWLmBMZu@h(gYF1z`?wi0aS@W{cm$<3&Y|LuY5xxfQ5P=K*y6O*7MPX(7k0BokmES*A4je?oY zYp!!41$bvZjj}6vMg^0yGD)0Vk`e2ar6j=-Xl)g@9#|@02J& zu{WKC?z5r7d4Tl}2C;H#Kmy=%C`()F(wC+tV&NHBd$L3%02Ill{ef3{bV{TvmS{xj zLFRV&BTo9H=sYdTS4Boxp8Of{sPb#-sdCyM9EoZmHf0r0<;SXi`m|s2L#kAbLK1LM zwN_I6=>BGiz0o5|k+Ho4^4!C<9p-RojE zyV~VmJAu1h#?)!X~wyWn^r+lL_-sAT4GN)Qfsp@+k zjX>mq{Y1}C3EZF(b*Z4JS{Ow9tKA~;*Qt+{uc0CtUHGn*Tx1zAd^_x6>xNT$A|5e8 zNo-;fM~}oQCfbTmOfmFcNO~=nF^w$-+!fE*#h=qLk9+Ln!2LMLCC2edK5XP8BRR=R zUNV!L+)@rZIm%L=|1y=UY~?FsIm=q!GM8T}UnsZdzFi(OnagbEGov}pYF;y&+wA5y z!#U1!o->{6Z09@UInR3DGoSnH=RX5F(1IQ`p$l#3LnAuTie5CM8|~;v4;sc%7Bi$P zZRtzrnbOxQtEQD%BnO*-r=Z5}sGkF7Ortv0s-`UTcH3z+tw+*reYJLJz3N-zI@h}1 zHLrW^>oAY)G6ImmVp+YBRS%m3jHytum7@V-{yN&y226>7YU`&4wJg*I7~cdSfD5;F z+r}je#1sqek2E{B#P#yQPTkw0GR9~ny-c~&J?(p=TFCl#aa@2ffE@3e#1bH>^nAj+ zfFr!eJ0ZY~|6Py+AkZq}5HA$Kbqw%|^Z0TY=zuxBwh|6VkAe6e`IWED%me~v+zUfF zc#8{wA|T1#=n?8?E>Kw1*vN|URQXF|G=$5{Nr<-@O1j!h0Qj^3)CJ1`Y6Ng|l0)6e zJjrc{cYJJc(o;!8cJ0=!VuXt_M%F;REcND1mKhv@23hj~5x|aZ1+%9p{+;`*N}v?R z+=d88*ntmruy?m#5jC8qSX4@VFrz)-0-u4{2B1xrB5kKTmoa(NE1y~iiWR2Fq}YU( z^qh<2)Y>0WFy>WmK#hAQ}SH z|LGV&1~{Iuea~kc9ZL|8w^_^n3F38C+hmmh2TTi&BtQg2365xhjIam~M2X53$sz6l z2pr;^fJy1m-UDHT1VCbx&qVGk?F%Cp4_6QKX z;wO4B|re*3>;#bxaNq+{8eTPMi2Z5g-L=s0o5>#Zb6_{||@~ z;8a~W*^Z)Y(%WRm3ebRNoP-3>z%kCo4-|$6A;l2{1ozlqWhBp_^D2nICG#5s+jY{f@LkYJQXM`leAh*A|rWl~gO5jY2C>>+BXLpLN4PZrSy1*OciAx9(#g(QEb>|iGr~18# zG(AW4G|*A;)B&snR2oHMJ!WKrXk#T@!0`m+V2)rMVN}M=h=c|Y@)%k2U;w~qi4G4> zP)->ZhY`@o4mgev*xg&SXw|gH=kVmSK#zHe(gg`ljq;7uSlEamVN;Gqq5KYZbOl77 zAmzBpMc80C^_z>DgbJCBcS7L~#Dv!1m}+e1i`4|IoP=tO&C-DB|42XyQbtdRNx&VF z7<^o)cy$H!bN~%j4C5(eh#IP66=GYhOQ?`Ul6MMYKp5b>g~>UO`>z zS79GG3I|&7M5+wSj>epg7y(9<5RD`S?i2;BOyg``#K(O`&`D7afE}R}!43eTjxfQC z5I_!KfUs@}23U)+VgUG96(jY46ip%kAkmcINL#F4qVyfF^6DS)0HZ{Nwn~@@w1^Na zfoYN}BN1n!5X)sGKq^w)shCm;hy_y&sPSP|r>;|X4kv1W$A|9Z2Jovw3;}!?reqyz z!M+qaG1gfK3RqZ&NN`Q)oDJ`I&PWbm?GQjaMFd2q1`|vq|G+ZAkPyLBAfe+xiD3kQ zP*9xeP!6&X7D+XoD`q5HibS0fUCfFG2v)}1gpPiGD*?2H5#Ww1Mig>b#&x(2)70#0 z01M{)C}T`fW^s+7T*h#a#cTk_g)GNKDePy=jV4`&1Z?PYtb~PJ#=a_}!J=(r@f>3z z5v+s@2dN03u!s-zfDc3wq)?leoR^-EUbf}!5t)mM3_$j+-nxpail_=^p6ZR)KWK-BI-Q$EwO*>!pUaKvg!DD#hT{|6u^;sFDRM2}STl2Tn!AF4B`h z0&i4o2L$L|+G=l0MbBfQL|g=A2_R)ejN|ZZ1YF|IMwkX@S_tQ^O>kTdurEf;z+CLF<5Y%7(xcV^nMo8t4rFBVDnu3{%Mpky zT<|Z(Sw-p?;S?R5#h9r^E}Kn|FP%yN?I6!;7@uj_6FAL4=CDS^2tYa6TZiHyYK-mn z@^D+NZDScr-?4~U7D;Btl`z8X5!oq@AkbNDD!?R#WJClFv_+C6E-Dsp37sGZ88NH0 zF5eRFPAEt9C?3x75t|Hc;?@Qz`E5j0i#F;f|7+q%BwE<*n(B-^#~(?ngj(w4E-j9% z>Sw62E-DhL=*SPyl5g@rb1}xU`hWzz2y_fna3EG0Uq3NK-6VPbJ0eH|2{_mbM0V81)M5G`NB$GD(!e| zt@VaSaCpxR)IiOZ6T!NKOg%s++cUzLo@2>MCM7Rc5sHXF$-ZPsku=Ha^zFE1YGvNg zLa>M^eHEa*NB{)1sCKbL@5rh`>!Sn#|LO$^BP+!9x&-QR00%_YYQ*jq1vCeYs&8O` zaBU>OKm@5;kP~!^gc=JF2tY>UfFSIKy4(vBOpC0HkzpOl8LWyTLhD!l6Q@M#47h~v z0!#IZOK93v0=$3*CL-Ca=BX6)I*m!0*k3(kjoppfc<@o^Y^?xJ$u0$t^3hbh1rp89icZbZOpIFO>;xl4 zypDujgbpgx>q~RS#l5d+=q1zyK;|e9&$3KO!i`#pDeG*`2+!$@Wd_CmY|?tLUJuI= zw#{u|P3#QnFcD7#WWWQ6$chc*|IqM+Ol`nhE4O+4aB4C3Q7g%-c#++{0T7tQ5$$cJ zHn9V_kSJA958x7&BvLOkz-GPfS(@jL%7_=czz2npX*U#nB<9#5py5O@YZ@OTIZ_!F z(Fi4~y6#l$0RZ#Lt^`@wB-uA7K^zNB)eF^75a7t12tg1`P$%V0om>P|Kc1>=c5ier z(OqF|AdyF>ZWgxEE|G=wlEn?&0CM7ARDf+;Uxv*^%t0>qjRyzirPf5ThTxfmk9YV- zFn~)(MFGr!*bPK?bzqPaL}4<9!BrNIgHkvhjEH!1NbgfK;ub?e)-^4Z4L^B2mvsh! z0BTT=ljC@rFIkolxdN3H|1!b(M^vAwY}i$;$8QNP0_`LOWU@kB^|vBpTAT`Z8yI8E ziL^RZUhNh#8Ij@92f0ucYFGpYph$gD&wOu~(TqTwD})A^wVH$alIeJoLoDkUj+S4~ zW;t+)g%)ZU9Qk5f3&j)PP#j;}Hj-Z+qPE9M2)7f5`mb|Ywh+=ANe~g)HTV2h!qh;% z;JSOr?IVI>2FVM;|Jn}~a!nq~34ik2bKIj?!%w{OLqEP5lRUq^?HhmeW52;ZlVjq3)g%37 z1Y7otzo9n$*m{0KA-{bU*Z8wPLkbl2AD6FBUf{HU{ad{4+kgJ+|NiqoK$s9XkYGWB z2N5PzxR7B(hYuk}lsJ)MMT-|PX4JTmV@Ho4L537Ll4MDfCsC$UxpLtEmM>w(lsS`T zO`A7y=G3{9XHTC$fd&;ilxR_-N0BB~x|C^Cr%$0ql{%GbRjXIAX4SftYgeyd!G;w( zmTXzGXVIoryOwQRw{PLbl{=SiUAuSj=GD8GZ(qNE0S6X5m~dgkhY=@MyqIxg$B!XL zeheTf|7C&%Qd%|v003r*o@;8BJeqWAsG@_qgsIweYuB$~$Cf>tc5U0Yap%_Um@@&+ zoqvPo*_*S#-yx3=^xZq5X4EQ)N8df2di8_9v1ix5oqKoh-@%6$Kc0Mf^XJ1`SHIr& za?8?vx;GB|xkmc;mlMPv9OnJ``PmClK&JpGKscfX_$@)s76c%{h3eCf!3YPU&;-^9 zYEVN9FLF@94<`)KLlHORh(r)aOmV;!S>$cM;x>Dcz6xnHD7wxHf-gq*4!lu5kb(=+ zM#4bw|wcKt?5xc}PI|;)~?npBw;!;g8 z|8vZ4%Qn|cvCKI?oYKxaO&WlJ2d~4?s2_D462>!~6qLyd3oQsxBnjnEAsGRD@}Nbb zY!tra-ZS*SLGkR=(~S;r?H;;YOS-by6dgI=34Bq z$p+i(uhAa+Y_-!ayKSV=i(Brw>8{)EyYbFj@4fl%+wZ>t4_xrU2`}96!x2whZieb> z{JO_&ggi&d=WCou?A*hAyUH)`{6@{uRI+l)MK9gRGeOTTbIz$`wd+eppp8M*L z|9<=M$!A{t^UJppee=`zzWo?shd<6Q<(%Kk_^*E-eD%S!U(EkGH73qI|7U&qW8VP{ zm_YX-aDfW!-UIjNzz8;wf)E@Z11(s<3QjPC`n#Y6Ke)jVb`XOctX`ZHmqHb;kcBOD z;R|6HLmAGHhBdU|4RM%59qy2aJ@nxZffz&~4$*}O(I5#yctq{2?sKeTV(ZX!M9yW- zgQ!{JcAiKk(crInT-1&Nxrjs&N^yiHEaMr;n8qruv4m)3V-nvu#yEr$WKj@k_vI8sEC+JO>UBto%G}< zK^aO>j*^t6H03E#nMzfz(r}EMqa9xTWr}TehxG z!=$45E*Hx@`cjY0WacyL=tev$lbX}CrZc0t%xqQ@o3LzSjJOF+Z%Qz9(nQ@g#aYI3 z&Z&yKG-5I36wYm;bDrHaXF9bxPJGH!pY_})J^LBZd-{{0oTDEr5t>kiE|j4Sb?8GO z8c~T(l%f^2C@bFy(18jxpBwdPM?uQZ?IlyAAuXv$O={1S{!^tWb?HfA+R~V^l%_`P zV-kW~ zRKX6Gu!S}3VG)~H#V(eyjlEk&^ZHk~N*1qnjqGGGTiLp9mamk(tY$l#+0TwvgnZoT zX;GWnr}PwnP7!mbaYst7v;0TG0M>xV!bOafM6T;{tcN z!$qrdlN(&(LU*LaWo~qvOI_qnSGwEv?sd7FUA6``x8*hOdC{9*^{$t_?RD?s!24b6 z&ewtEgr9cfn_v2NSHJk(uXq8BT>*#pIyY6VPfB!P1y7Q-!hG+8Ask@|Png0Lw(x~_ z=v4n+&xv6?VF26d9Cwb?m>woEF_Bqf`=*hk8|LqS{|78z7YCTYHJ0&U;`JpB__-qRQeqZE0r{1J;UDesYzaY-K?ESfg8Phe`UqskL%89j|?C|G_b5aLLkkceR;4?PtGx-tayyd1;+* zeeav!{r302U%l?Vh7qj3?)9)$thzlD8JB3*WxGYiyEQA@*g?*9y)hnddTZR?f6lnG zISxY8=E+e&$~2}Y?VJW>NRk6dc_HVsa^uLnISF2pA=6Z9jGQ{vJ-5@U0UmUr51r^m zH~P_!YHN_Qdzf{`^Az3uW`Zjm;aglbFS$*1ZBy>oXuP_|Lmu{}gMIAHCi~gVo^~=` z8|~Y6)1GCwPKsxmfAQ3H{{YRUjh9{CVsHE2|K4%6PZr-uH~irdpLoSDp7Agg_~7aJ z>%Q|H@R0v_;4g1^ziXcIf)Dh_tD|Ozxm0>zVn%% zJ?Ckkd))8-_PzHY+j(Dk-+Ny8#V7vpZEyVKBfqL>_qG3h@#|iXoWA<)cmMn0AAk8@6!yXQKKZ#ne*1?X|M%ZN_yJJ= zB4q3QucNLn|N4*r{!aiAZ~+rA03Wc)oNxXpumUac0x>WHZRh|CumQ0T0v#{}Kac@C zumlxw1fd7?)Nch@umuHz{WLHJWpD;*um)}LJL(Swy>3tlj^eth2P04GbZ`hgun0{M z1c~qnX$<(1ki)<&OXAGI$PL)k|EK02uH-(fe%M3_Bd`la&tqeCY8I^GvnXwsTs|}0M zuZRtkP)yGzuC?H>8lzDdjZqLikr;=O8*7XZ?Sj)>uH^u!9HQ|@gDJ!{vhNVrAP=#|1Fp}r|yIe-P8;q!;v2m(i;^r7!&drnXn-#sOx%9?-p_! zA@U$A5+fN>5Row-J@O+#G9*RPhoDg-E%FTqQXEzCBD--TUGgMfvUkYwP9iZLZE^)G zaU^weCwa0beX?&lF(dma*}RV^W3nY-GAT`RDUp&X&*&kA5*(XyDy6b2S28NE@+f() zBY(0hz49x;@+V7@Dzj24$&w|l5-rQpDc3Ru740VBGA>nZ9>cOO?eZ@1vKfO?E88+H zu~IDo^DhOHFTo2c33D*b(k~BlF%z>d9rGB$EiWZ=GAXk%XK*YPvoQmcG1+o6H4`yA z)4ATVGD1WyP4hI#{~{+Xb2VABHC^-d_OSpVjx)~^G;5PKGcz=Cvo8%(_CTaLJX1G6 zb2o$YHiz>#zltkgb2*u_Ii1thFcaFoE;o%+IIXifv6DKr^D)0^G?#+sP%}Km6Dw5n zInDDt(K9{UYcGBC;*c{txsy0;b32QZKC7%Z`R+HPvp(bVJ?&FI0n|SoQ#sYMKn?Uj z5friZGw&+S8fQ^J`7=W2vp=u%KNE8%jRHLR=h4QqLp^jS$}>SlbVNzCL@A0r^V2=y zZbBtAKr56&;j=|A^g&b97qtiqSu{soG)8q4LVJ`g3DiV|bV!M`NIhvmPjEJUbVn`p zMP<}Ue>6KW|MWwtv`QZ%M2$2{wRB6lREAKLN0}5xn-ol!v`nFtN%50R&(uuSv`xqK zO~o`$udGYyv`+2xPFV;^*%VHn)J^3yO8FE}KhHa@v``IoF|ZU*6?IV=wNblHQ2R7c z!!%O=bW$OetI||b_q0+sl~O(RQY}?fu*^|OwNyq=2(vk`5x&~kTB51myYa~5u&mTi6ZZFLW5MK^jp z|IB8?F6wLvM^Q0qOV@Q17Ixz;NEf$uZTEKJZ);`Ob4gKYV;6LHw{3+t1ZlN!jrVxd z;&5?yd6~C)8Lx3)7kH&Nda2aCbyFPtp6%Ocy3xiR8Ye(-mjnyJJwSi}!4o8e;F91p z-nhHFYa@*WcL)x_J-9={AzrG~E9jzYt^WMh`mQUN5|R?R8TY!Y z&lL$SL4vML^&iq)Jo_6wNmN}5Ts&F@9lu|BOeV~QkhpESd})_*8@~E-BKTE!+_v_ih^SYCM7U(phM2xh&XxjJsfckIM} zk#yxd(D9XT^jB`I&(wiKo!-0_!WqVL5EKd|Y4o)uRem3PKQWvsqLZ0Sd_<=x&zTs= zts59LtLJgzA0-qVN7}&Bs2pE!k@b*hTxAtfaySxy@hSX!gtw5NpRP~nbtoF=7iJSv zTYqVa&Phscyr;xlf!vpVbZP<^rrp^*AXW|kv^;eX-{V46rIeA;;}}IhKc>O zFCAPGp#iQ@t%*^B72d(qR=77g{_!M?!Uo)PX)V^FL`_lRZ~Uwq#Uphi<(p!a-3pT% zBQbA+FsmJkgp5O-9POQ>Lx0A=Nn<-^{ z53Xa=Zj!Q^Vy<=XiyPzVW>yUgyckYx2!vxl-lQ}MrMeJDS7{!GTtxFH9oMTRh>|5x zk)<|F_~f{y?>41J61wWlrp-OfrF=`uSa8!8y?%D>oCHcfPo7K16Uidd`;zRh*f%iI2x<3(Qh%dIdVnMS-hKT4!1Zr(gtBrip;;8Sx!$K$b6 z-}iT>iAEwN*7W%a%_XhP=@iY)wG}Cw!SSKkth7%2oAlPjLxRjUe> zwm+#%!3`9gtHBhl%4jbC{@_meF)@0x*{6=H(krp{?OmncZTY%;EH}K~_AcpHa<`3Y zrM^(8DZKU-MZKR#g5?N<{UI|z$DWfIQ{1^aO<#cZu0GGBIYFl;^nL03q*>1f*CD<7 z0MXj7cXc<#WliO9j}#|AwwMl&#;!YfE4=13xp~v0?UP``++Ev@X!{R%tD8_}#$7v7 z3qy8F8>j`b`n~yzqMg8?-6y3Z&9#H}@p!30%Z-Qb<{W}stcz%-jcT!#@xJS+K}UgQ z6-rCDvS-+?M%Qc4Z;Henl8ar^EnP45dooUIUyAiGQ}#G{_K?Nazq#-Axz`aE>vg;T z7E0M0-cli#s!)2{o%V3g^hB&L&vO8G>YJ!&|3}YWHnG7-1F6F4k3p1!?^6dGJcp!* zdW*z{zk4cnrM~e>8CqQ&3T_!f`qVF3Ta_U;`ibY;Ov~smPnoh7pKqQc>#1X#VrP9G zl_{QMWK{iBZwG_8+8#V7o-Xk$hzX0QRAPHgQcz9cil-eIFh}3mCFzeUFZp>iPQ3Q| zZp1rgswCf^JW10!_&#mKR%k*~KWNzF@hxEnvvtzwSLYkA*1XZFm zFZ;b`%C+_~-DY2HE7WPj_C5>#1qQz~>iE6#h5GYSvO}2=tbZ9|8~oGU@J$hH5#{+F z9@YBSY^H>T@LfA93X^cOA4ld9$7k`0ZieGBKPRz_w$Z;*kyV`_8LfW`S+Dwi%1yH? z^}9%0>EJ}k!EJ1F@_{&|PSm1+BL(|rYtT7V{s-jia!53>fw^(8p$toP?l%~{YQ(+n_=-Y2m+3&N zd`(l;BDIVsPxPjBjN_Py!<6>0P+13~uO~Od(?dSb*Ow}2~v^%GxIaL>uhcwUY@3WJB zIv>-;Z!eA)dLt8??>%m=k8ri$JpL5DFGLHZ`FfWnv*3FBDv^)q1$lR^fVt*yYZ8 zqy+lY4VcUW@%u+o$^;_z!c3pdj^UIFPPa(E=rxIDeV)V^uOrZumyokmKjD4xsmMIx zaSkm%$;P)SKgBkmj5*Aq^Sx!7>xA&Qg!IL3feHuOhlvb-;txAn+@L*hc9_84P7X|# zbvHMbS})dL!J>FKKh=3}w;(g{aSJpz{=;5TVSX{avCH05^Yn`5TgK9wfsp*Nj}z|J zr7hF*`{ixumWfS3MjjvL%cq=0e>Tj!Q*bmc zMq3{=?!>1YHaQFw?!k|H*p6Dxr>&1#ueVB$+V1lQa+?7)Y{zv-1Y-8}X!M@P^_Zb4 zTwUl7uSzSs!KyZ&zLAy`%>v?_4^Da^LF}h}3<)-;{VWAoyLrtQ`=^6kz3gX0d^0v@ z!$R9(yd}7ziwby9Vhm2md?jjd6#M?{3R(aCUiBuE*g;SeqKx& zJy6z98YeufpEJuSbDmdgE;(DU?|pW)=s08hI8U|x?5N#ZI=udem#GV6!JFWVxsA4k zxbte5B30wsS5Z5mjmVFsr<;kEz84=@iS6wIXN(8`Ql0>67oMiWXEAx-5@h0h?vtjxuNIjc46#pB8c6TV4j8HaJ=p|3Y$fF6%CP!gx7HB>Rw+}OwlG7o7 zGJg``I+R0w)z|y{mYYKilde*wPi))kSb#P+3(aUJd#UeOH#F=Wh?`VOnyFeiitr(Z z$w%{*4Dv|~0Cn^7x8T69B!?jE{d7n|VC;EQ@-3F*bG!ljl%=t2el`WfoM$Qi93pDf(+qs{meD*VDiQMW? z%(jT}cg(_ms`(0gc+_ewB^Q1C&2!>%UWx0}ce_KN7mD@aQByMJ5^2IC8W^>iV~zy! z#Eh?QNx8#4lf&8kgkSO5<%Txq&?{nX6aJaZ}PzPue4EBM!EqZc= zSFNNi6(*DCYt_in3RGMMCev@v3nZ|M-y#c-$y!t@k!x*;YC=2RE~{PQHgfq7BU$D1 zosSFi&NhU3$@;e$Dl&||PiWwNQ1gv{oouFD_~tuCHX!vR>OJ=Ivkd0%{NHi;tHRjM zP6x7@aqN{m%Jw-v3#Y@=>k6SSt@v?EbX!$^CQF5vnlUTR4d`7~dt&973Z&qVXm{68 zAw83m(UwS-iud8sfeJ_f+Fqa=+U(Hx%XANIiJiTma!{)FH@>p1_ zk8kYdx3h_Y8*I)CG>zHXIcBge?P**!x0-V}`;;slh|Itz(JGw2!QZZaNq}$je{>y( z8(u^tv>rKqbc195xXDjwJ7ui+vJZcQti=EU(B7b;Ap_6>><|F;<87dH6u^@QZ**Tj z|A4?CXmChqSa?JvEGjxCHZDFPF)2AEH7z|OGb=kMH!r`SFd40=w5+_MvZ}hKwywUR zv8fr}(%ROJ=;-X~{?^mm*FP{gG(0joHa;;q^?iC~c5Z%QacTL-%Iezs#^%=c&hFm+ z!Oz2^zmuV`(M8w04Nxga+QxKTmDF2Uu9NT&>!iOtIGZsO3M3Tv9Btp zHxeQpLMdOJ+aJTCS!~c>oi~{9UrHa9LT%yr|4{n=p?nYjkiKJlQXm%;u-xvAf=PWq z3|Q@g60jMDO;s|rx|1oUD>YSb`h3AYdt2B4ZF4j;?iWzGnNO%UQZ2F_Z8Drc#N?v7ferSW9FFJ^y%3)*zLJ(i=G(e}w3GCNfh)KlIHcTrqy z4^`dQi(NlmpTxZI*{{F7is43Nv`;tPNz?A^{}^p=e|QiJ2%7TB$b7QmW1PhV@x>C@ zS@8qQ&PF)lYg?@bkXjV322wijtOh{>S=OKo@m6cWEcu0NA?)=#YoS~{EbITZ^!=@T zMH>&%N&>qZF>10;H)FN5-*3k0S`=-@8#wQ7CKv}k-AXizf4`Mvm0z@#Y*W9xm15uX zbUW2?`u%pA>sHZry65HYc7``P>rUoh(g$TK-uY+g)BdoVm-t^x-(GQP{oYBQ($zr7xfzEbN+3i4=YTtNBgkjS{yl=xo_?)dQs$T>@$v1&-VGz)) zf|-C9q&1jcjc^LptL`VaC`U>r()?-UdE>Oth6Fgady29cnpr;_W-U=04roB(;a8HF z#Sb*73~yKE0f2BrB@BF#gaPbw4>-XLgMOH#_7Y)$^Y0-TV02evMm!j$dLM#8(Zs>l zx0W5){rere9NxCXI|M?J=Urb#=y52^kfL5G5FzxyCWkzI6V`_(OONjqFs|Yi?xcWKhOUt7f?ef)k9#kXNG)$=Rrv!~AOk7U%=c zdbCIhj{b8wGpWoWorb8`XK-D_(jbcEA=9Z_DN1SyJ1v~8+C?_YLm%&n^syMU*Kf$W zuj~e6tro%?D<0h6ueu@r@M<>BT4HtT;J7(P4%37WJIYMDM4f04nDrq zK03g6kuM*5;)d#Vgm}x=NfKVOIqC*>1fvx3bO3LWy@`i1(FOZDaL}z?sj;$vujD%M zlaKvbl(H~%`Z|f5j{~^EXsrlYq=BEF`122C;kY!iQl8q2sdr7|>eRN;Y79eZSXJTR zllnO-++dnhTEf=J7Ad(;Aw5z0^bD4O@^?}EKz|w1_UlwO>To;*2LH$RLJCfv&Tt#{ z?U67md9=>uP8iT8E?fWX>HJAM2J({RKd6Q#c80dNfsx(^5HNn8{Teatu}21$ew@4|w_*vO6FDmt17 z^2!6-CALxqK9C4^y%zsCGRPfPV?pPC{5Ya_mblI9-;XS;{N=^)qAAtqzcu6Ps8P76Q8<}(^A@}FEq+jf>80cjuf?p4T1x%S~1*W+b zu{wfV*<^^gZ@Ochqip;DI?`m^ZK!~iJcE??a=Sj&uMD)n?A9A}hD<9fh;L?qWn;apHG>?<-j_5*{KVmN1` zm%FhLWIp4@6+y>?x}eo0#^VoynxDgwuzf1iM%c+6FU;{4TmawQNc7sZ>rVQ?ss|7$e$`suRaI{)KhByBa| zTVeK(o~ucglmwhL_-hrcn&GqPcXcVmCVa!ciia^E2HTz5R0^+)?&K2QNGTEF^MtY) zW7GPd;UL!pc#}SE6?s>mWSVoW??K}2D}=N8@GO$qS@U zypfPp{4HNu0>5VxM{%fhPf6sjxrim=)z(mnuw{vQr3(?*OY06guagC}a(t|NX?cV$ z>qp;E(}(udQ1oSy;0>q(41bNiRKA_GWbwFC{){tm9I3TKBQpP}bJ=cfUR+7bK8*v) z5HN<~E6tVVM40`i7UNh$ER^K!T*aRy+*q|?qq$>6jy? zY+d=tec^8TdZeN4>Su??DV%2EcLU;yioItg1$kwaV@Cs?4C$olGG=6BH?ztK;nS8i z?Ix}s!L|$sPP0x*)t(M%mD6YslMN5eu}H;i1Ad;HoL!(g86 zEj{I?fvF7ZOfaPgSW`uI^LQJJCA+o`=*oUWwvo88BRQx~^+Wga|(II`__7$;Iv( zQ$bQldArWn5ae3N!}~s-pYrNP?RTa-Ny7T}4NUaLX!ORK^~SmO29x6LkoXYl`VhPNkS6+&H~J{? z_&lC3fsp#r3HdSrF^trnm`I>80>SEFw2)&rwnpp&fv?<9>@6KXp~MG2kw!nUS-8UuLgP)KwNARf$l!K4h1Az%%XjCrUd}MoRu#HnO*|O z60v@`gvdP90gor(cmOc>A^;b}Mb;ldcFRvF_E~Gtgn_(L;~qg0-h&;}r=rZq3r69f zmc!q_c%NhMBC}?A33$zc;FVpm2?uaI&*Y8q!{k`8u-xKH@8At`Cd?6HvY)~|=>|}s zV3)Xpln_GRjri?Eyw-Gj03Y3iI^(#^&y@i6H~^qrQn*O&0Y8e+GS!95 z)2T7f={w%~S)e&eP`$UBfhlCX5C0IzWbirc3h;XRW%%fEWNaom-#W_THNiA@q`8#I z)e17D1>iku)Q*$jWg$p$g)>M z<(~qJkgg4DhB!5@k$yyQu#(}^nMP+pXhu%xUmZh{#-q38Ftc99P&UARK>+1KHk|z! zgStv<-N2!>m=CqYEW30;sIW5$XdKwEOict#A8#q7j&3jaA{g(ZJfj4F1H5i@VNAu8 z6AwdhInQD6N%LIrfy9hapRI@TjT`xoMI~pFqh>z@9OnnVs4*LlisE?6u1=5;aYObi zF==&$ELq5T=`^lIJqfRyE%7~GZhulcEV+0tx%?)%k}RcKIHmSYO8ry(J;#*hrj(W< z2Ku>_WtU{cE=IeXwREx@vhh!P5KB%YtSl^Q97v4zkzsbm~%(yQC{=Ui3 zB9lO#$4Y;b`Hjni8r|1-7Pm7v)0)K)ERyxh`1uprEYjpG^5!hc`7COY)WMr9I+1J! zz3i{*Uoya%OvOG$yS&ahiK}3HofF$=;QWQoBzDmw!Ao&VcQwVi_yd#03#exNsx4)1wzgvMtN@9fz zEAxK0H|ugK1ga-Ws>3T-_+MK3yE9`t`J2SiAERT*Fg}N9|Sc8UVw zzJN)jaIDkkH(CiBIafn7h!z9n${3VZ4}>dZ6J~pm(3=Z%{P}V&X+CUmaULKl&^`DZ|Ie8xtH%Gm+v)~AIz5@-j*MeSDcDe zoasB$SKKyN+|O71zO4XIR3bmd5A-W>K9!=URAQuLL7OXa?kd3)RrsP+g!)y) z9#y0%Rpjt0%7rTGyDA7pHJxZRgMKxWM>R`IH7mTDeW9A;u9}OYhDWr9PrpXMqedvD zMg(3Xwovo@u112QR!X#1M!#0pqgF1ZRsmkCv{0*ZSF1)*ry*LWrC+D*QKy?yrw6Yy zSg13+t23skHxaEj)33MisJBX~{{XMIS*W+WtGB0Ua1d>9)NgS1XmCwwaECW|E;M|( zYw)IM^c8LN*KZ8;XoRLThQJ>h!xkDN?iyhfP0^xFvHDH%9!-fUP08@4)P<(>yQWNv z=4{dCT>a+!$CK(Q&BgHM(uL;oyXHy?c(o|JRv%vP0dGu!H^bpA3-Go(ID(?3Q?#X9 zzoo~cr7xvr0RFgr)-rO}GDgulA=)~n-#YElI-Alu4{u#uXkET*U7=`O6K&hjZ`<-{ z+evBLgSQo2H9aFTQingEYw_kd+U#GO+!rSi`+JE1*11J&5VhB_N1iB{zn2Nw? zL0~N+aPARc$_{+74nl(tV$TlJ)DH5N4$8$2>iZ4|Whb3jCxbyJlV>MOYA0(;C;MV2 z$9*RkWfzZF7oPz`mw;!NP->S*OPAPU*Yo=>3CeCM8{8xcYm0<}-wokC9gR)zL~{s|lur4=TIMUGwTaw74Wm@?^zfR4(_%B&x9YW4J0`3L#pr43h$qP$!YL~e15d|%Nt z6>T0}F#ZIgu*7t90384a^01&?z@Gb(Lrn?XhM=i;=Wf&7NIi|%l z?fpr=j-%oIfP^RQP>ytIq1cDp&wv!%UIANF=+6a09{gB0TOD2A$uG-nPirO6 z5oR2p-25=0M+qQwHr|r*YVE)O9Da7;jbbf?~d)iH_}W@_r`Q z3Z>7uGE}g-^6E1pI z8iI{c@5tM}Vt0=<$4_xIYp%iC$l%iwzz7n3 zLg@71LzH8Cc+vErnkvTr>cMl+evQK<{h{0QXu^3X&C`qNGE9e)G3gtmMl+q@lmJe* zeh6kotsn@UnoBEqwj;&&oGFH%UG9aRK{;$Ze}};uyjVT4mz^c@dIeV#N-EWVPYANB zs=!~=py3{{q{fo-w)e}VDZ-*H!X;m^@Pzn zhV_>wa(<^|?IF4^zFdGjQW3Ot3M@=g_Sly7WOU<0ef3hLAHv=f5OT3>K9N+CG>e9< zvMjoA@;gXJCYQ`@kL`e%&Ld&*_}Y*fqGrVtJdGJ+Kiah}`HoJudFNUw_}x!B@@_#W$#oVz5PuQ@z6%G6+;t^ODC;{?A zCWd)W^NSTZxFzG?>UAgeOo7wm$%a4ZohAPhGhe|f5bBj5aY)t_oywK{K9ZE{Sbdgu ztYsl4jH2vz&qH*W%KX7ynDDk^9N&9tTlsV@5=YNB6ZxeIb8D5azpPoBFJPTE(@oXP zOU4Q4w8Q_w4Qia{r>Ak(qsS*hKz?Y8ry47>K2oI?&9fDiu*29RG@+J&ZQM^P3${zN{@&e#Qsu zhbxuxkoHJDXUa0*neZyYYOa~agf8?SFbV3*qmDK4&&Up4l{p{d4%CKhR%6oi`D zNyl49{`k$^JTYAE+@Md0XCla!bp9>R!M}CHL6F^@-@C3eG_-NTw|QGUNODr)TdZtp z-U*r<+D|^{kN9BKUv-lKK=jqbUqq~5k6orrw&2rCOT6lG^~k& zr>R(@v~m^lMahW^6d6AUrHMu3iM&~p(H?+uetCr=Qnw1yJdO`>tn@e&g(lAR<=FB` zye_hWzIVnkxHs45OqPr<$2TEEq0WG4ljl=WCW0~V$N=at7II`jTd3L|tx1om31k=# zDvH{I1>uywt}?xzNYG!nC?O`0LiP!ZA>X$7K_lDgrQh?pbD|VfiBvZ<#`27|)Rmi- z@)k@{Gm}Nfq>j3tw?CBA$is~v zW+homs9Y7`KW4C~hsAT0OJJ>lBm`?R^qvAEn@Vi>K7>PQRujOB?gC~P+&&WDyh*n< z@nsUAot)PAQI<;Gze(RMC6Uvas5$#%eElBFn98EEIBx?8yXU&D=bMR@h(Z1k4s62i z9OPg3L1%mN&hGQ3C1!XDO{9fgJ)Vm3FpR1e>Q$ZxG#FxWw9aYVJV^M7Xr0??5Tj0e zF+z(w`HLELp63chSB1jt`3^Z!_55i}NOD(N%y=zY)w)cq9t|D1iQbUJj5-_UT+i$M z!l~Dq&PZX!7vfurD_MqP=mch6sCFm$Wlc!|c;v_3;bM9R?OLda<@U zyb?`=x;0Q%O|^qq}I7E=BV#63h% zX=*%lUcGRTJvYQa$)}r(v<){B6Cj3j$|Ri@K5#D8vTmTzCgnEHSS4Ri;m3YAk}+lr z)T7E4k1{I1FLzEgtd;Wh_Pa(ZRTs+5c;I>~oity0JS3n#_eO!H1%@g29BNsReeH{= zId?pQE)5UZt>CEiPPaQh5iM39{a&zjk*Gf&?>!$IzZVP=UBOlP+IHrBGcD( zE-Z|EAV}9DlliOi>c^f0Pt|q)ie4^d9pLq(v>yYiB-j+n#V@b!xqNAhf#(?J4aiOK zWo`6D_GRYK#j5Z1G2a1w znhH2+H}{LrGkq{!=pQjyyqi5UmeD5O1KizDAI3BJhJHz`Ga6aGXEoHMTaX zy1zu=mj;kY;aj^as{k}mq#RaYFOGvNw8P#h2BKLlNDvFeD6}{9nFWnGVLjV4!@&#A zwgQGRf(m9aSF+yQ7x55S?)_%NH~exexK$1`1dS*%hOPh@_je)|0ACz>b$&Q` zW=;V!STN-ujSB*J_Bh}T39rr6^|udgDg;SLgzSNlQQdGbL0Fn{p?Ge%X^A-VKoFX7 zlpauTcPu0m5Lvqt_0|gJdJUp*i(;RPE;jcoC(<5)M0ZI$U*z!Yupv);;!K1-rp-1?fI) z%gGO*;XP2BwpZ2TUT?d>IE*CA{G8>b-_u2UHb;EsqX^CFF{aD}G9PHL z&kdqDXVmm9SV-oxSD8FqcNk(^QJMt&A|-ePH$YcCpaK`Lz!^lbZk1da(zsfSris1W z%N<&8k_whGbOBlGb4JbR@gaD=iGXOI_{*Y*3+pn;Qc&;K1HZ{(QRp!T!RjuGAD(^2 zR9wF_Y_2xzs78H3XHMhJc5ux6=At-CSTv~G^VhWt3`XcLLMaU3c+KAcc*p4|&5q+{ zMd{)rga3-!)h$JW6WJRsHO+|zt*lRxb}W=Z#MDI`SCmwVT7_czSYu>tJ=agchnQA> zLpRW+JZn)7g5b2IBUbcaHY)F@`3DYRIdU1OzQA_%kbjj@bdk`@CxM!m&kC`x3p0( zbDQkQN=)7|mjc|=>vl)y!kfMto)>dZyvwTtS0XxRA0hcPy8Zpl+D&fe6Nhwqhg0I;d?T1j?VUYa5e=4Ljt>-Nd6wk2owb;8CI z)jq;}7`JT7ckauvY(dfl!}6wZMbdpuj;h(j^C>+zYFt~FQZ+P zi^Kk8_DL!6Dv{POA?y1D-EiDR4Q_MaiCF$Rw%YG$l_)ycRK}S&gwH^Q{V!QPsu^i} zp^%vhuA*=a^-?kFch&%!6`+SLzzGXC$A!-N7xoKdF*f4|RQq~hfU?xuZB^&S^AXRH z3vY3b{g8%A#cA?^KznV34b^LV;OBWEiPg4(RL z=|ouO1fr79tiM~s3AQDXl}o!o8~!@=xUS86K~331-~g0rEA<2L#+VAb_$MjiZ02*n zUp%-U)C6>VHhV{@TcwHN)TitCJ)}F0tlbIy7otCji!l5rkW?&r!#!e2E-H-cM?N+k z`!f)#J`o=>+wL#$k2ETj=U5DBxXD+~vD7P?eT^ozWodjTxx+B$PeTMkfStqGd=x*> z!&1Jbr2E@XOFioe&0M5>LrKOzk5V-rWZ%lsMo?_~FdkLew8K5Dskt=D^~T7Z)&P%b zbQm65$;DG$2jakV@LUP5lt=h6i-$qD4-4hIu&dm|3DXI-7RSR8W;dCe2U$6rm%g!e z39{oqX3y87I+jwM4EkHB6e6fp#kaIZ5}x?yVb6kaZ?|;RgWPf4OFDa!$4e}5D$J;> zM!9ybuMHs%oArqHo+2vu!_nyHyO_$m@n3cm(|42GcBjFcsfJiqL&VVKg7n|J`Cs;S zap3RSRjMm}GG_h)4GqgR$QSN7^J=K>=1>p3z`_Y4k)fFQN9zIrD$!tFG* zFfEhy{oSz+`5euWjyb-5hIGulVcx-|B7G7hHo}g% zip5beHMwsMW3ASofg&nGR-(qtP%*m>xhy_$$-v=u0Q;Z7i9~w$&n&+dmxAoSx8tZ3 zD)SajGmCa=NfNK49$}$)Clf4up{F=o^k2(aky2U}Wi)DWgfC{n2Ytuj&qkMbC zZ0}66uhM-*s6nd&gyq=B6`7wZxEiM+=O4alN?^^N$6UP21HZVTE07Y_^F1MZMHeA$6pyDNj z8fN`SH-4r-y-V*mNd}8Wty~R~;N0Y3d4a$A3Ag&U>20;z2gjJ#$n0Y;$Zq2D2!E(x zj--2jdi68J{)r!qTlC{49sWk7_gxg2yRi*88?JgXe_ZR*763*~5CalLmIixE&qvRI zD?553^_@9^LO(_l%TKP}t~G~YhK=G%5&eeNucTGdzqsF1uzh%!wIIYQkjL?WA2NIy z@^G!Hk{S7Mw_AQ4`SAD$+T4^S2mVEPk^V%(YO#{!28h z8>#32=h3kLO9^imYAZku%i9-N2=@6+#gEX#B%d($1<(5$`x9!*#ro86`DXD@D4h8| zB_KyY8L0H2T1fJ7R%;=JkQ_Ns;22`<1*?UV4}<6;N(VizhVHuliwGg0cbNYU6xIi! z&wL22xtGI;;dS2XqLtO)*%X!$B4e}_BOPO8)Cj zh9_>=i4alg18F7BWLn9vdX_WgrY}R@^kdD~OLqZyrv^9)SlLVm18nZm671)&=}d(8Pf!7Qb`{kp?}j4cEG_yGHX zl2>pClg#Y6>Eh6;eg^#&Mv4g$s5h(BJ|>c-inVuXFR^w(a3vyQj04zi;(<0pVYp= zaQbZPpm8y!YnfQ5QO4SNGHo36>~hvD!S-^_s-Wz0-lpN_$D}h*X0!L=r2V_TvGXm>hE7iwd#X1IS0D78jgP7nc3oE=C5M<8s8jy zY0RNiF(p2#8oITbB(>;n$VL}iwftlKE{C4G#By}t6s)}VXe1T$jw@2mpX!~2=niEQH}rkua6bt(#>ye>mFwY2J_)mO#Puys?D;Ddor^)S zF4rp}Yaijfp+=qMK<~KnDY6shjl^Z#^$Cm*D+lP(mV3O@`+-*g|T&_^Gsmfn`*Fm zr@zQ~7C5|6hFM`e1Yaedc(_nja9}*b{X7SPT_pEPVIn$NOXkOXL~*CvM11pkUICOz zu_;H{a*9u|&y-dv((0Ld;ZAnxR`ye5e$q<_d3|T` z&_f}Cn#*2XnKMc;lU}|o79SIdY-h=#P-n`T4{Ocs){_jx(!T5o3KIr$>4YmxGi6*; zuJJW-k)w=}Fn3X1ppw5U;hq-0x3<=Kt%~#Jh+$clRwZCZ`Ut_2iX14n4^1HkPR+bVG>R3SvF}H z*v0?kr{U)YAR!v`!X@a`(Eqw9Kv~;5H}30=(WJo_Xn>~lQPU~+xcFPcmU4yr%;556 z^Hu9{c!lS-;*Z<;t2Psv4{xGlgLl?C+pn>?$X+rVe+EM9R5}RVG1+m}d9FL^5)U6F zK>2tw-yJ$45nNBfEtnfy6Z*l%PlNJ;z8lNE#uF9t6`U?!(?Hb@8x63R`z?aQQj6T; zFLDfnXe>FMyS4(#{jHyIqeuzqQul2n1O?-pdfVf;B`TrO6Eyf2-(LqWe^-DpvaL@W zGz=C+*}KPMZ8=&s4h8j}>Q04OWFtX`Y_*5{A}F^-7KGVIFtJi=UTss@-HdqS@O`{x z-;tuY9fPXWW|Iu>$co;M!y;;Pt)+L|we)=HIna16#ln>QcJ=&b`6TM*VdzV8jk4){ z&tNBmQ+sCvxE+9EEJf4Ty=&h@e_K8@cI=YaegG%LGgyHZaniizz$X(Y8RlIxYptjY z)3gGp2H2TwU!rg4)^*1KAqG(M1f1RvAiR{UUm-}YqIN5nX!W#Jhb}D|U|=W-&$<4n zFv%6T@$V>C>)c_LxtJYV$Ju3BXC)SqZr7dGJEU#_13*#Ep-bD`Y)i-jw_y0?M&12NS*xiuUwg2v+dHan1v*GHy&c z-2c2U*M@`g-3ZPT!YT%+WO+TR5Q&s(?Y#yi9l~0$c_LndgUGx$+Chrs{6NOV%+r&h<_2hWgc8L zx8Zgmn2m$qP0^=q{qswk0MTyUqVxXGh81#Vo5rnh#lxnZ{F1}wgZll$e{OqmSlYGS zKd=7S4tT?I>h!bO23 z*f^x3z4rXe*HrV8wm-JLQUS&NHGD?`A4bF$=FUbXOo?R1WJqk!$K{yI&L@-vAAOD5 zt7jKeS~|8D-*qj^E~X7!Y>!3^V~DqC{R4j{4_N&1HAgpOyrnild7tR$uIz!c2mpnP zw$PC+>--lA4d+K+gQJxm__wd&AYF-g^*fW`qXGvxdiujwxywY&S-xLtmC*m8Av_s7@VA4g7)#GiEQ_<5cV2_CgrBf;*) zLHf%v7*EC>t6o3|16*Hdv8eXJ^HzQBJmI~hhZcZX-$j3CO zkrYDo$JY>ZNn@O^{q8O#7WxJa1Fiy|l|p;cDx>JXbgn)5K}tklu7)g-l|#@q+mm#R zC+#<;PP01RB}x4X8mMHZm&qsi>^E}MI-5Vej*eX8)6?k0p?{0KpFYH7V&$>Ck{{6c zN8}xp#Zc)$kC&92ZTRMK(cm<`aVU?&#SO-He40>0M!~iIu7w5bEV0jwB-Six$cw!w zdN?efuR#9s<(hy-uQC56r0B1<*T279|M4}JMvXVb&c%Oxjpf(|5aM##ncmV-Aa>QS z>Z0^`9_hvu_&Kih%d!c&JKqjJxKPcRix02$1B=*BQPh*v=r`Md9Znmj@rZiq9O?kn zm(q{ErnAS6NqJWzu}H%~tTvAm>Akc$#$(&-T$r5^S9$+zNcrGA|FP|*7NjthO@2`* zr(CSzg%_3aoW3B^H{U3A52KjlqFDFAyeCceR>@0Hc^tlqTB-!Pc9{Lcs2K zBu&z;+Sy>XV3ZmzlN(a+R=f5ovNg0TrBFIm;jsWWCpt+Z?q^=k_wX=%etq2;ZgY%Icl`e<6n73l5Z4$N$8Q6 zJxnt@0I}p0ebU~Ni3yF`e2~2vG{&h(>{Z(0Nx2!aQmILv8QKzn-wfMF)TC}JJ^GrP z5!aEL^sAxm=XW=w-Z-_HPn7>FU&E}ttDt{7;m0KLSd{*|#P*k>Yd$La;s0FGvylEj zSM>kGCARLmwA5k%DOD9Yki~+o9T^Viu zF0s+ciG}?su^r~V3t?~0lMD?avzkER3Tc$22T!>sg!y7+nQD;2seIYmN z57CE22!>Y*&mT){?dJ{4AzBtsV*z@9mDm*g%oD@Nnm~~j(f?hEE!iYbLi_hzfx&y6 z$Nn~yX?`j3i9sQYTfpU9>D6hjQ1{B(t$4n8IS$NqNsPcFHF&dQJv zCYku1h?0Pp^H@=lj&l3uE%U_I6|d(o9!qS*)(2I6OeF`^Ljol@zU>;wWi?ZeivAc5 z>n$vS*`z!wdLY|j<3_yozbJYjGmD8&{o^$5-~H{&L9srZ=tp}*6onCEX&L4b+*@BQu4vk|eYgGWU_v-vdU z*RS+%ik?6^{HW-h>ylGTkORzyK`dqd7l4mx#=`G#XtAAIovfa zBJBS3w^a<6ij9!#6$xrN?hZz(m%-Du`?)TMqML}jBj$YU`(sQD)%%mrtr22sk`pGE zr;?kM$mjUnDy=$=Mis4I@R`Z`%M}`P^M}jT4AT~lX`1LSHwO(zM>mHhC|~c-XFfjs zy56pM_j@$(eU`dOWWqBkO<04F+8iW~gFWb&D zLv(Y|@E)pYP-&yw<0nuFYIO6eZD3)CEWSUa1Yh!v`~>hO4iK|hqTamibnZ#ap|~m( zYIvWIUZwbwYEFms`TS;Rpi(ZK`b8!aF}|+tJ(!veum5Fnc69tut^{>azX}KXgJR0J>}ks=C+ z3Kp7$!RL9tciwN-tU10}$C}y8X7=vmcm1#HJinFwr;9$JlUd}Dat!9pa@xxi@Az}k z$p+A?5F!5sM`RgMmZv}g#oI-ZwlXb=)lNMXczkB!yrT@xddOIc4rL{Q(r;j)0cc6m zVYw}tg@O7b|)kWm{kNy=d=Ssu2dbx!tkuBW>u@;L!t_T@!4E8cDU>!LUNK68;`NFcdYV>WEUpJ#Hf z#I$V2JxXDhIPNVS!lL|@Ui&1Y6bHP{J5JDg##pP3_N|78exxpw54Nj+s6N0MWXllq zqR(L{%j9D%Z~y*_Ayyeii=lmc-PQ3?1sVR>hyU7dXU){P$WE=!1|PQ;QP#U@>aH#R z)kUj!x13sA?m2F6N~rgA)qT0PcKlBl?dAIU@qg-~={Nkj=xjhZ?4O7o2@txpod6Pu zyZ>5WgOLBV_4WTUV*mf)Df)l%a3z9@{(wg+x*{&YBc5eM$oZUqxFi2sU;ke?Tn3{m zg?~!aX^V{>Nt5QV7XV}n8<4u+DB=h?OKoy*C?rI6t8?lGYat=9;X7S*e&ge?-&qIh zwD3ouMc(B{BuFc8#MS4Pc7ZU?q31ynMyCbvx3{tiq7qOTaxD4eXi*4U(4<6nk*Ih) z3@hXV=eo|b6#Xmt zd1udONt?361=DIuvynVTM`R&EM_7osM2Ta1Ax)EV3KoZsh=$Q?gGsYIA*msWZ^-}! zMiH7WTz)(zZ!nA6eBj)?OOXsNCC}|WBGJOPMEOVl1cn=EBo7AssJGT4OT$lA* zfWWBOcG{Rq3mEQ|&3JaLoA-hJkLnz7UM7ZM8t}>>Wf-nfL{|Qg@LMpyxj;!y#4eq6 z@iX^@AVO;($u>AS%faP6w*Q=F>(0Y<8H5*t?z6{>ixF@RoAzj~+BBgOH=>JA!0y(T z*d+cIa|{C;fjhS&6#bqzQ-Eie#I&-B|=`uK+G$p z4p&oMin3*c&imhmc3Qj;FG5P6Dt9XLl0#B6?RNX4vGe`-i<4IrGQqc>f0zzDJD3|@e^B&{b>jWU zM)m9O{Wkf3^Q^u2{6yv3{~}@^B)9o5K1BH{4_;{gsk5n3Z$tP8i*)wXCT zxYT$Rl4G=STeRs6>VgJ7F#WVGy8144A&Z4L%TPn+)^T;=oaT5pkR#J*mxe^mQT#nU zZnjN1P5GYYM4xGH&Xd5g>tV@BkG^d)6Kjtvv$iBes=ejfUA<)ieY#|{ducIcYn~cx z_A6-8a+6dGPU~bq0Gp}+*M*N4a81u>`1MCVdB%>1dEG?`-YN}p8!QOBb-#)vB+ulE zae>oEdOE1D?ZhGJqAKXQiOz*Kt3Z?sZS|y@Wj2~HPUX7j`1XL-`Qs~YrKcd)a(@PC z{gH|eCd+K-r}}#z->VgT1NRS6=*YH@n0pjIw>=eN>b<-oKNVVTf<=)M-y?Nz12KaZ z2$cV0wNSAi@W$B)Fp?jrHk_Id@N%!4kW{v35|?fl0ed;vFD$6I;yL=R(ovgG1Ii{# zXp4@$6Wp$9Ki?(>HEVUo!we7DjX}xDdJ6Bm-HDU<@6+hr#G9J_Hj*;BKuI^MxOs9bCO!KiXu=sX=#riSkv$|M8X zi9R0Kwx$!CHpWt}Tr|$6a&?>BFWN9a^tciErg(^{AG<=2m2K<&aa`L^Pa+;nM$}Sk zd%;o~(@E5PU4^Zgk7Nf- zru!?Lwrlc_B!|a!JfcGA$G;ZiDVWByKoL{P19O`r+gRZXSre$aS{BWwi*}K^ru?CK z*thamprtODtFWk*q`e3SG45)8yIPth2!gN14e(-cw^^QAzMUwcj9MAWn^6LbLARiv zRwFn(lUvn&;ES>NwzQfLO%F%_0MJ)IE~Cd_sVB!xk%aGDV0JMHQ-fL{=Wd-o9CJE< zPUkl(y~BP%(#~#cprItEQr@*ydn06_YIA{=QU_lCLH&;1*WjAsc8S%vXF;^8VneB+ z2@nEFFpUN2DBUyxr}iwI(pQX#0Xn!ROpUR>V>P;{2LO39sDSTY2lmPzZ2Tg>Npl@D zl>K#^_?9IjAchl10p)BFmyRH-lL3vfZDQZ$z~8#Fs!@6V!Yi9Pyp0|}^|{;!v4WMi zWKD1ha#XnP?12|Ww*pP(&D(r_4DYg1Z@b+((f2VOYQf_pAQesRqG|Ru8AkVl9NCSF zuSSqgAVJjZvxip=(+>0!<)M~1NoNnl8Vw}R#J zUGT-{>skQs%uLASd)L9r_OrB8hUg*hCJr>2c@c37K;Jkl^6Y>tn1;H25nLI{`GhIgBH zB;??_@JCgyeC{gsn>!@tW0ul&iqsT4kFK48 z{Jap`%#4@iI<-AkP1Ag#8|{y&cw{8)f;74Z#DfjdV0H{B@{q)3gM8vC16`9%WV!z@ zTG75vmxK-1MB0E@@0*e>NEASB>crU%$o;_;s6pU*wD_nZ6EgMP-&ES+Lxl~t>4I2^ z;OXZVrmg8Hc0w#t!Yvjlj5@p<_dX(%a9xB(Zbd>`o`L++ds;aJujC5&$EJ7jd-9u2 zkK$4Ok$@=Nd?fCW1c~u0ct>vG;*IbFIj7$(w6xRo_9Q9gJVJ03n}A2jAUEJ3q`7qh z9JI0JW*>R8Xn@$SHK>jW;^=Q-K^hSS2=kVqyJ$Ah>%uo-?q7~k!*-;oX#o=|K{h8Y zMyXcJ{;|a{(kKjR5E@wfJ{H#$Y>bMM^ajw3lY5vbfwz6IP0mJ=4+^c&n`E5nKnVug zE6Cy7LQm}rORv61a=Ax^;{j%B@6?StIqh~IQOlw^JFX7Ux>%+ouLN9xy)qN(uZdXeN}X!tVoJvnerNg8V1wT*hQzsgRrAJ>4Bv5f6?{7uA?F$#)D@oy zz(fxt!rz7BF}_VL$^7ANQAPL(wD9o>l>?VVmY?m7D#(z(lw}n-gHhD5B;2yX0U#Oj zYb>>79-Soi0Mg|@&)`ahHDgu>jM824TUMJ!a@#SYXh}`2cGEM}&CeJfcvkyp6d~Y1 zdF$0jPFr%IREvw28%B9VK(E>n>_sDpC zuZ}y|Tf~0_14g<8Gq?O7%UR6HfLno%`r9c!WEuC4ZQ_8b?~^$!{Tx0HGJv8SoXwQf zcf3q_IjB`YVq>m5EN0P~qFdru53zaTgF?C3q*y|3Ns~>l0JUOkke}pTtufNqDF9bA z5H3iH1C-zoVLc5p)b?FA5NL|nR&De!=1ycG#0pdW&< ziQc&b666{F0K)weB)SB97)x$NzOo0-a|3Qzg+(F2;zPu!!<$*##PYFVDp!y$oo8r| zBDF-RkXw$agR?fbM5=}8-D)3^fwIW4h*uB5M-o^wiA>zQ2+32cDrX6v?u5`KJgTjy`Pg>5n?9}yl%muhUoAQG;WJ)k(EwJ8Y3>+dS9TP*d(o(B@)Ns6E z_(hN+6G*75X>_kipPy{3A;_HAC`zicKPQLIp3{_AH*q~HWo@n{o`Pb{v-67@cK0ju zx6Ribo3l?{>2)c`1vuZ1#?N~$K)|vF75t1eTao=;iu4L=V8$ zEPuJaen|)U(R#VQP9JGi3u)^@HELb1uXE`!D{Yq;y|-{<=NI{Fr_J{)5Jm#QMvC+r zHz{;-{obs$|8~rDqF}eb+MY9D?n*&@5^S~^Nlg|9wjq;-mY8_zns|MHy-DjBnoqgT zdSgY7w*$}=qRYat3h{Qm;5PI{goSkd_AXa+ff|z*i%T?=Rf2^&!3EI}mHhx|itb}V z?tw99Zd`NheBfv8dYD6p-Krh&X!D9y?1vt(O=r#h5&OZFxU60Wt6u*ESX;?dXSP^w zE4r@)oiaUfBL?8N?+R><=uO1js#${ER_xm&bVUJDlhG+T{$PTZH{}_4j1?cb;XZKF z(PiRsJ?im_F4epMM6fkw@;$i?Uv)a{N$EyVMrC;=y7)5%C1(x!^f!mJqQ|z@y?Uyh zjOo>c4O1V*LLw+^U8S)E!MO9II?KA5ui6=5jTo;5+nrbp^@^wB!K7k?`v8eESBR%V zzq_;8z5|2>dI8~@#z(^X75p8Q)x``I^90#h`YfN|=AXo4o-_}D9 zt};@bU`JAODHuow_3EeqKRdBSpcXz3*Y66mt&mlp;SRJy+@Z{i-qAid2ciNZlOm%H zfqJn++ZOXnR>r0Dv~6}XX;>__^sp&%5! z@$;j&jdGsRs%THD&ue2ku{7ouOaygzJ7TN)2wOu-MN%J`Oh#RDD_7LJ6T&0z*I zQDSxM(09>bs`-WGfdz(#Lllb=vJ(%b9#Ysna8g4XHj^x5Y+MRSfdXhCXAzK6%xcx0 zlfM?iA{MzheT(tzmT5ev8HE6M#^n3RbUUkz?(b==zPAUvlw1@YHv9{9Eb!f*hB=%`}JsbgGI>0j|fOxX1Fv@F1H4;8S>*NBe71Za@uv*?0WqMYT?`fSf_Mwa9@A z2O|Eps~+``hj^PX2wWt-oI6z7Pw{7BDu%B>iF}laSW&=*ylHI`2;lT3Joj49E}BXJ zMBjJ;`GkaMov#n6BQ>o&Ouq2AZ+eKJkQ86R&2*yZ?>y%bE^5;SeD5!wuRa7n3QaU| zA4vx+J1Q(ki!D=lzeeSA2%*4;A^;CyEmBO153w{<78A}GnHwaa=Wa4C&)@d6{*f$L zsavwBq>x*Z8|=VMq_&t5H7`|yThdqS<*o`de`7|M8I0pnL;-*C@lkGsP;7w7XG=)y z)g9L6^2uJte;vwiMLucII*bN4m%eIDm#NL+phJP@@bH%9m&CVJ^FLG@sB!-AfA~^! zTVoB(gaH&$dLRiv?NUZ15k?&*|QM0>l&AoBnxpFDb@I~9Pa3nUBcxcB`fxS<1{SoQX6It^923~Rj*g9?l z03ra^9=@j8+TI%!yr;dHj;i%Jjw#Msrjx!&?JEs&*|gp(Nv9P(DtYwq=cAjXOOZy2 zxh4W2WcR8YH+4oouq)h#N&_NuReW}(kRbH%`ca6;gG7mC9fODYx2At;?Xvz%n(qOJ zS#lnq--b33%hRQCbz~fEAvmU2<6Q)0?%-j*xmi3}>bDQyCj;HPIcb}w6PAyuXJ#$t zzS>oAcJ@_J{DRm_@2S1Jzkj`VT_J%|X#)Ur`5>pBF?<10z75{t%!voA>0Sd<6+)zm z`E&Z_n&msrzJSFHKEJ(6@%#RC63iEBO|e)ExGus`k$4Ef5G5A^&^pT-uX6E+xk|TR zv=)Np9@h|MffABKdaid766z)b^`Lq;Ko?;Xv>LBwF z`z>!bFB_$itDEr!r}EH-)F_$e3YI)LSOa5(@r@KpXC1(5b8(_z6)&~;Q#;Xzft19I z!-VpbVUw&PIHihM=9T{e6>X?O5=PD|?fCD!Oi3b8!m?4aTKPfCyTux#y4U+;4<^uMSV@2(Dj8gJtc>iE$d9DQajG+oii3f`+nwc z?8S?|96^TfQ$?wkOCtYZFW&Tq{%>F}&>^pc|Kep{erl``*Z6l{W~+2n8gE7XO3W?B zh|BWOTnuweTvjvpD@RHJGj5AJkKHn?oT^8+l2AQl+in6X0k+8rB-L+I^r)nr{@^m5 zqqMgC!^Me}f|mGA1NL~OZA?r#xz^4s*ig3FXhT)EnQ>E9%l3+KUwavDS8Kb?I}t9o zkM}BLo|$#C#$a(Kx@v&}7aO`n?DO@jGbWFWO zMeDOlo4z-QKsr`9Ww~ryag`Rhf2fy<(TKhFMUGax?)!)f(8l|2I+c!_SwqYo6HYTD)Qv zv%@YlN`^b}Ry%D3iZ~Ky(*yxUuL=%&v`>B-hP@x*6@V$5rbz`*-k(7JV%;`2F-`tb zV@s3i*&@=Q^;MPHD2w~qI1=ojKe?UdU8z_XNZiUb{&p*ytH1BNn+Q#oSet}^ko!bF zS>Zuj>|RbByL2nhMefvyAL|t564K2h{`ov+M!yuyW_n-5k@3g(CC>-hCByRoe?qQ^<}{;b(Q>5ZF*=9i`D1&aui($o82pDO$d6|K2EA2dn>?+q37chi z8Q2;M@JeJ(Tn4tLnTp000{2Q}dW1-%E-a>YBsunn%lw5pwB!~gWtRtiS zL|S)yOhxO(w|K<{+Vh@$XQB(BW9K8w(x~e69?Q)D za|`h3=(%B#1!d4 zSp1szwES!q1Gds&p-Yi6vN~o$yyeoqL+aGwDhc;RW?XPqg7Pt&^D1I#bf#zT*^RU2 zr><=SmG8KzzqfwYQi7B{xxcO}`k<11R|gPEk$U5%DnQ2CA%a=Xeji$Vb>Wn*Cbp>Z ztD0mc9n~_6@A(J#WQ>aAsXt6W=wj{$S+!-WO#quszPogf0!EQ5o%m6@mI4t4r8j1y zz)(8;=Ue)xIEAE&4J%=;FWt+bCKLe6WG|@!F3kF*Q*qhj198eVx)>qX!uSMNB8hR6 z0OlmQo}O4Y8^83Lvcr3`9$*z-BTE%CMq!OMk!#L5&^9n_`7T3Yps@{R`e{T+N+YLqc=8rX+B2_33_;4 z8dR7$2tIpvwlME@B*}W;)$#D7ffK1O={4E8BMG_jC9oJq)Mw~x#r=uYsJ5C5+L+@8 z!->tGugzmKcvWoC3s}?_UKn}zWBmD(=>ZZl!N=};3Tylz7^cjt;|@o?8I~YDLVnkM z3;y!k6lM6mj=|?rJiobPBZ-dP6bcpTuA>L4lceUa4sp9V= zLQ>ybKEt!grG+n9)U?}@b7!+5{YPY{eY-@?bb+2>->RtR_AK+xmorKI8TIeUC+4X#pk*2Q9B*D(C4g&fWz91)dQ=yEmVR{*nn( z$vcX4XZ~`&@p+0Vr6>w#R(-x{c;Pl(O>!sA=-1%`a@wbNfwHzFzh(~~{yd>($V%RE zxPo~!2MGCTiO~(G09swU$3?1jNc^S}406NJTG7j>2kpKk_ zxrlCAy1R?;yW(Ieqlc#_7@pGz8KMYC)qT5m(yvS;j^aFKWLTvv3eO_w0VagyIaY0# z=^NZe8v|+p07SIN6|Hbal$#cCHk`_)B2E*BNOh8y-60Bg|a#3VFzVKpj)46Oow=k z-g3Z3F!Vcz}wk}t+ZH3sM!K3hj)2qXybJs zL)#AJ2 zw~7zH5)J)C$U%249;OWnM^<^adq=z0o)T)>;iv_5oQD$1Sx%t5ZZH7sVfDQ=r?? zmGi82*z8!b>`0U%-XhCn)btlViPwbZnwfkhDms!NC=fxYQOV+Bpx0?vQ}&9tjEoa7&mJ->4~D`c=mpTys^kyE!0KpzMYxM&Mp%uuh`I%p z6dbTVo}0HJSAUc+W28K5!N@v5gcpN#<2(-LeX)nib4JSH-MNzlAsAQeJ~2&^+`XLv z5Z^Hks1nSVY5YZ-_||in@EGxqk@_bw-+pauNO#MK2s=FcvC)#izBG|2-|5LTj+ zNDS3AZ_rZ~h?HqTiYj@K!hI8WF!3hv%gT)#@T8}2I^zO3xtCAs`>ge2PNb!%T^E+=f~=jp86Jg;iN*XjZx*3q*bZ;GSHT)dZ>ZCbBW- zsOo+Q<;z#obj>6btp?K6qr=%Q9bFdru^V}pcnmvnrs^h;1`47V7(PY=xc1FB10Er= zQHR|CmG9T)8RaARBUCnM3X7@?FC%bCz~_jX4lyPYaf+iHO1xlVEDS`ZagAysJJOi{ zRyfs{0We`+JX0H7?aPn`uYL2hpa=s|4J5y>09IDJ09OUeGofj&8+k0#P|{e56me0V zZpi6ZbKiG_+?SO1S0&dy7e4i7AQ+WhVN0oIfvOg@(D)D$;I%v@DHdvqmi7S0??F*t zA!%Y1n-=_tDyJe8p!$1dltU`y&_lXdmNdsHOQ+dL7s(|HZgga#8V@P#$OI3H_tl7h zF)E`^gVAzj@tafW4w$fxLq4l8qH3K`cYtznccYAyzrj#nQ0zx7A(X~cHP$eVB4OV} z))Q7J16#&DBG7f;jPz6?bN_^=hb0d+0itK^xcT-8beqw_bz(Sm(O1 zDNJszr~`MXN`U2?;u>e0YM0%hp{z_v9v93}O%UaIf+Eap!si;ZcGj*p)nb!D55Zd9 zokm7VCA+A>osU{dwZ*rD;ns2|@xqOTpt};*K1Vyyj4BwAE0c!-06?c7!jxpPm7SE? zIUIY}#)U*wBqf9SmaMPY`H>gtfR7cKOaxPqFvY?RAke5jkQ)`?40Ppg=!W+i#E5R3 zGal$(L*3!8Zm9`kYltEU-dX@6xGOx1bG?149kvnITl`8YTd`sw74JrX7!i=7UR5jD zKlmp8OH!0rb_fMCnTJ^i*z+L-a$^J>^0HCtCEM60_{tK)rlY(hMPFA)?zI|w02hDP0N`f~1)uIkWLa=^Cc(gzNP(8*L20MiN7EuRfu?7z1#dklpWN(k zM5kS-GFH6H=)E7|`6}bcAr&1?0nXu`V;jmGAP&lHz+%8M4nFkL51t~udAghMhYnsa#bgm?~06nJEd#3|$jsP{}Cd@&mB2$;%ug`fri@f&h9dgMSc`Q;x_ zT|IJ$EA*>x^XO6S)1tao4~8`K6TRsXQcucy1PxU6Xadyo za0BN;J8VVs7RKBI8B&R1-{8ILvE7YQ)8brw^5{aiJh*g#%9fkv{(j+|uQdVua(Mu% zeicRKa4@1PeXR8Q4B|qe`fw@}UYPq%ZoI4G4Y2x3==ftB;k!ZXhZv7(^th{lDQ1uY6rtoM(84M`vQeb@N@k2Uc>5uwQZ`zkz+k%L_dNwKayR)mQuLl4s@EH9mNFy;#P zoVov@tIG3&5@x)H!{p=+H{DvOPaf!t*`Uek&3qzJuHyY-F_=1Mo_Is5F|CL?d85wJ z_ocd?sKI&0dK3E>7;4tK%fVjhk!0!lNofDVY94A;hl_RU8fA_W%b|X$!NT=lVAd1L z#lGG6d^x`epZ38XZjxJXmNA1~gEgsa3H!YFL9@orgG2HrElS0_Vsux(azvlnu6}#r z_t=YmS@)^-QHj4p(uC7P4iP%=>=o|wH$p?t4LWDyy0)hK2vdh!hRvHZ9Lya-b^>mb zz#1l$0oF@iPn~kxNk9HDd@K8otSW7b|G1NZK}om+y>mU2dBfX-g)I+THoMs!hwJa0 z?B2PAUA%KEc;_Cr>aqUr?(cWrobMH0p=821{W%{EY-c{?N-OvAAM;@#PmW!6)B61& zyo7(ZXCBAcFO*wDZy{i26!@O%`c4m8_U7gPn|=H1NHaww1U1HEFY+GdxL7i)o!_u$ zWI+kiv?F;oB1Y(gwF9n~3RN@_^v1JE(2h!9uh9kWbU} ze9X6AQf*r{6Wvm)wfFU3UWaaocqtL7`-P9iFxJRy>VGs~I-_D(|Ah9KSd{kv@R5hT z-~Qs6rd>$_!zTKDlbvU(s(imXQ&A(lu4834M6b(Kd-Kr}LtgPq)9Wf7up@Z`!H!u* zw_@3dS4Yk<-SE$TYG=@|A+iEsR;fmCk_X{8rF(?t!1QH~pbK_Bgi7*L;w70zJt%ca z%C18buReXF`)RXJhkO<~!4gL*bQKD%nvJdf)Mbc+5y0V4@N$1VU8>hI30Fum=4 zLKpRR9hV1X`mpxeYlyM&Jzn30yF&KGT0iq`@MN8I9-))r7{NvSGI<^?MhpfZvB(>^ zXe0=a)xbp%#r-8X!bZeqdxqoxz430HKYEmO(OVD*}GM&O&(0iem?Jz)lHJnoX?clbHY#2tdjmf|uf`&;f; zZ&!zMtH=t2Oi(2-!^-R=Yev@^lbj&6lW&rh=2A=1L1f22^s#n z!2KLSe)kpOC_8DQ2GFRvZ1}U!KT8neCE0P2DY>S0P4aAVoDLVynb z&}=bP%X3$TZK+tP6u*K`Hg%(qwKP%AA5$8l|ysvAPml_fkf z+HG#etZ@&uyKO^Xx7KN46F!g5+#IrTdH00wIy3i1p5 z0+%t18eTnzFmq|>2I6j?m-iwuJleFDDg!y_&pg-lBN*?!E}Gme_OF*~&xeGYjse48GRMU} zw8!%ozTQ}=Z2D^(a_RQ7{)Ip(k1qaAvFN;p{PyEyLvsJV^d-gO_qTXiS!)j0@J&+t z#S85?iISxh<(28XIoBKJH$%J4Rn%&3VF^S!O`Dq&p+Fc&|->(2iGFu716c|)I1ouqUoJOyw(WS zM3V{^7tuY9gIxxhu4iiQWnvdGR?`Tw_Nw&svXWR^==Se*WktEOL{?8O)*uW*MTcbq z)P&M8$8RMw+*Q$wF@7pm7XVr48bBt%hIDz}(&lFEh)bglWE4^{L2xUH z$*0nBRXi3vat3wKYXMQuPJmD=FZgQSHn4a`5ec$Ua@j35z5v~oOkNovWA%snmW|7? zof#TY`QRQ}MJdf(9Ky;ZfOQ=7=;G+6XU4yY=T$Kj1*y9ln(9Z0;GBW0$Qh0g2;~-S z_o4DMKdBzg)Qk=94-sM^(k#mi@jBHG=)`Sq&YMFaDa8p`zqI@f+-ya18Yqi zG2$gMH*+hhz%aa_Ni1thUjLAZm#a_~Bb2F%?WrGi(V^FNL~#gDm{J1m1St8rdf7)< zjFMW)GX%%_H?$~Ma00dMVLU9mOhiq7NV76sakLAg9}!4LT@h)-^)>uoCm;DC%A3FtT#0_nC&l$xP6B`7Rg zhOg4qVb_(BCV$Tnq|Wb8ZUp2Ibp>=-gQ|1FYp%4#jkBL~pa4xk{k1;&g`;f5k-PV2LB{$vv>iOGK+P7{i?yMBmhE-%!#1;LY zJO28UCTl8`lpYxKfa?C?l&{0{6sx-$0UtkQh>ky23e?a&_}&9#K4Rre5SmQ8W^|kqT=CWu!=0P@9XEeJ>=3X>DK=>65#&+#b*-k&W5(Pe0SNQ1Z;{|&nPL3p zhovZr(RS)I`}ygsRuJ6t>9e5VF1Ajh5bygJHZ+|s zvP(hPU|-z2q)9aSI!`F*R91jAxXG1#B$MlhluxRWIHjK^zKHJ4F|j6$ZnDV3{=`V* zgibx0XZDb|ESUW3Iai zYrw=_7tv_|?65Gg3uSEH225?64Zynk6ndOshB3Wgn zK;UCHYEk$a4bB$Blo24fEcfKVxHo=G^kw*NzDGA{;9DBEq>lEgtgs<2XWOvFXrHMT{j?LOxZ> zI#nhpRW2q@FgsQ0-#Epq&8cdCbBen!(y%^6Hp6K~Ea@il>1NjH7D4G&+37aj>9(us zc4z5nZK-sS45!uPCT~|V>kRkq4A0e!yJs2R)pF?zp+44`0YRC8*_pxJnW3wh*Y2cc z>}E#X!8=Q3MFnNyv$JBmv*K5?63?;-EZHgY*=g3<8GC}5pzNG(`|R%Qg0t)*mYfp# zoHFa2ilCgT?3|kJoVwMV>Fs|L90lceW&b5OTFvdhlbnB+J5((`D4+KzFYR{APb z-nXd?2(ApwsSNI^3|*@XJFmpBRz)aO;cTj+f~)X3Rk1x)@oQCy=T!vO>J)|QG@I&- z;OeZL>YSeHyg!`ci~kW+T+>riw^q||Uem-{+oDk0W>eb{T-%jX+tX9qw^rMKUOT{A zH>6NEVpI1t_&*FsYjv~d{|m#>|3|?QX-E_JQgGDU1bz8`PH=Sbf5C9{e^GFhE4g$j zI8uCkC+Jde)IC;2)zI~LqqeUN!@T{H>aA{Ow_pFhNB==D^uve#j~}jlzUuYlh(h42 z$CK~5{bx7(4_`j{_TkAX#lZR1fuBE~kg^YuDGfku2f(ie$PWgfKL=>p2kGPc8A6}X zc@DD14>I*VVLKRP|2YT}8lun}f_VCO2PXe4aM8oDmkZpw)mFEqe`$=;N%6Wbc!};%f}YS-r{W#=4 z6W637`{_;FLq}Swzx>Bz;=5!D-F_)Eg}Q$hxc+UijUKWFp}i*-3s3%~F)}4@{D09H zt&iFL&oxFCZp9YFcK-o`qIV|y&;Da8?I@9d{KusT#Cp|sqSEp1b`pwI;4ML9Q0r~- z-x{O(o$-J7AFHs&{D}uH{l@{}|K>k-v9@XW$A2tgF#B)*V^WPVkz28SP4azBt(-Px-yhFmghHi8kyq8dtJnEZFYWGL zUQc!ydo``!j_#mwRNEUy%6*QWXi6A)>S;gc3mlQd3cHRZVt2+>x%_y&2W~ZT6z_LN z2I>lSual?T-BIGvxHO)t)%JN*N7oYwE~$f8zw_1_h}!kILi6f$ z^e~GZ+#-x1r8612fOp&q1yFjB4m5LJ`AXpgQTaJfOppEPJwdGkEBTTu!rnAYqz(@h zz;Zl@46+;UpYPncl`0A96=nEKY5eS?d43QeqsshT&725HjD$=jR+ zcEVM73~U2H@X$~5(S0|A5NSWmy7;p@TY}udOuns(S|KTc&*SAtZT6TS8c=@7Xw&gT zq7HsZ?c=4q%4SR1c7plxOTYXO8?L24znsUVbD$cSlH$L98%T`#xOe8?ckQt&5YPfo zs@?l+Aj9$VLUw*hvR~laY$86nRzeKKy;%D6p~(AG)898wrf5-iUw@FImdIccv-`5( zE`}}pe4-aZYZa9H+B<%Re#VCs%)Vp z^p#qpf|rm>r%f(K@u3mnzaf_jC0)#5{3Ya4uaxygAp1+`g8Pl1QT=VFV2KuS##`}Z z9FejVORtV(0YA6R*t0Siz>6#a@zF5ka^lb`GC3MF#(C4HODiWj{LcdSNe6|Bh{r`L zdV>2B9ihWiU7yA!5zW8NkZ`0-oBl`~E_8yMu>P~a9hngvl$fyn<3Dzqyeit&ioPs# z!GgH|Ds+8v%bfkQz>TT2H~B|n)SYeYlMq!`7cck7Sj9g6YtH;L9ntQfT>ndr5p|1; zy1~w@cNulTlPbO&i!p}P({+sD2k%j&8Zphcy!<;Rr_g9xPG<`zAK>@mj(~R}7Mv(s zT477M1!*uothMA&;rZ6&#Dbr|yf68ywQJO3CZY9aFh9`1*`!4!`=Ey{)lQTWwb+xZ zU+CxobXM$i;&Lix-VY7fMyM=^WJ0AYUE%{*(4llj5i@8Q(M6UZLeSJq6@4EDdL7j) zxLIGQkp`nt1aMO>m?u0mg|Yr%PNWiVjk{$IBMe)f(k5GQ*7?KkT*C-acYy)W0js;$ zFvN5}ni~rIxp^d6CPBtiT20f=$yx^p9;1mAfg!S&Ce{mf>Ud7218{+q8gFUT>I&5J zrqRc7gB#K>pFxH&%+P|y-wJqMFk_u+Iu=HAwly@)icL3RWO-)?*p*=uC`L(l#9qbFCk0G)1?s3!v ztiX+Kc)PCTC#vFJ&BF%zyX>HQcRXuR>uoe{VXfL3oi2u;II{FMwGwB3w|jcBGuJq9 zw%=J_8M)QC29?*P$4u3l-buI{A!p~O?dF)*BB2OS$~@5e*sAdo`!K=#%FhASo%)Yx za15h_i-&wxws6l~hr8`O4qqkCdRVXgxT#Ce)RZ2GU#mehiji6%!S~``cH5* z*AAl%e{LBXpFB0}|1x*}V@L7gY(A;~n>qI9-pxnGO8xy(IgP(Qg*@3XJq?3i6s>i{TyK5xPLE z(5beh6?S0WerDjpC=28J6plUncI#w2;&ege^Px$npU6!|ePW{s?=qCUlPrh2$lOzM zQ9ehYJ+8=`Nu`TU08A-gK_%Jbm*``zzJv9xFq;Ab)Q`?}M2PW;;kHmE>xCq`KC&e3Jkp>( z8WX-|WfMn=1llw$8+Vf@_X@6LF>9CvnP#ZPFBBKjCF+B?jLVT?qK-#q z-X`i422HBuv8slaM0>b%AdSpv{(gtS6~><{jVq_~Vy415y%>S@*#n7T?4=gy_Mz*ZFeh8re zbj=P8`6WKtDW(v|D?4dy>d;UJBKC-81WPCyNi+H$rm?04QGx88AxsDEGRDOPkF!&Um{WLn#J|;RQ=Es+? z*s+*IG>Ie_9!O}4Nw@cSW(SQJvq@F<(lrue2^A}TPnfwXmsJ{@Rf824L;od*Vxuyy zr#}RKGqnhVXLbfJ)?$b=(A`l!V}>goggO(x-9A zUjkX(Jc^rquORUkZph`jK_@(8;8r`z!9gR%;HZ9Ep!|5+4;LpEAL0=7jSBiZ>LX9HO;(cwF)8{2+It#f zM~(huU*%-!_o-4}jJ_Yx-94krD@`)MyGFtPiFCDs&f7^y$Q1eOck1)|=^a$MG~Rda ztl?6kr+g7jXF5xdY)x%d!R()pmHM5o%;XsBp70XD1EjZQ&N2Wz@QW(rEesDV4@Vsl zXNu2d8k1&S>StPMWFhaR*{=D2Ys*N3gjfn>0e~GSQJyW09~pEoNi&%3ydx zNWznx*r>MB#FA0+;=Oc_?-={Dk92r&#%R?{FpTR#Q5$*ajq`olKv3s>}6v4J0St?A8-9E1rxZy{_#598DZis2B&Ms<< zuv~q~yWSOcNjKA$_rYM+0v3Pu6#ee~z4)t7XkWIR=5p=)SN7?j7Ju6W=l`?C-|i3M zu(GOuS^TvR80h=Ai@!5!XID49$#y+1sQo4G=xQ;QXB});Vp|dpUSf~zH|O8 zl`C@rMmf;=K<;6~`5^u!;8VG$qy6Sn8R_(|Pi1-D)rBy;J7|mHs%l1y5ed?NK9zO6 z8J9vef{m793^M_?YFv5qsT^-J+@_ykx0JJ-*fG_yoaBni1b!+T8`2>|L$e<{Q;cgM z1WPh8h6gDEpUMwKnc5*fmj1w}vbV-869S2HZbSs#3M1n~-`IP%(!*zsoe^KfuI0zE z_?sAUQI@V1l5j#ce5+h|nVI)5bFeqro0*Me zDj3$X$gEJa_E&FmdWqb21JJT)L36aVzJ1f1{CUWt8A^{ylaEesZTXUv8)#W1P&eJZ z7WIqJNGT*9`Bf4l
- - - - diff --git a/demo/index.tsx b/demo/index.tsx deleted file mode 100644 index 1e621a45..00000000 --- a/demo/index.tsx +++ /dev/null @@ -1,213 +0,0 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import styled from 'styled-components'; -import { RedocStandalone } from '../src'; -import ComboBox from './ComboBox'; -import FileInput from './components/FileInput'; - -const DEFAULT_SPEC = 'museum.yaml'; -const NEW_VERSION_PETSTORE = 'openapi-3-1.yaml'; - -const demos = [ - { value: DEFAULT_SPEC, label: 'Museum API' }, - { value: NEW_VERSION_PETSTORE, label: 'Petstore OpenAPI 3.1' }, - { value: 'https://api.apis.guru/v2/specs/instagram.com/1.0.0/swagger.yaml', label: 'Instagram' }, - { - value: 'https://api.apis.guru/v2/specs/googleapis.com/calendar/v3/openapi.yaml', - label: 'Google Calendar', - }, - { value: 'https://api.apis.guru/v2/specs/slack.com/1.7.0/openapi.yaml', label: 'Slack' }, - { value: 'https://api.apis.guru/v2/specs/zoom.us/2.0.0/openapi.yaml', label: 'Zoom.us' }, -]; - -class DemoApp extends React.Component< - Record, - { spec: object | undefined; specUrl: string; dropdownOpen: boolean; cors: boolean } -> { - constructor(props) { - super(props); - - let parts = window.location.search.match(/url=([^&]+)/); - let url = DEFAULT_SPEC; - if (parts && parts.length > 1) { - url = decodeURIComponent(parts[1]); - } - - parts = window.location.search.match(/[?&]nocors(&|#|$)/); - let cors = true; - if (parts && parts.length > 1) { - cors = false; - } - - this.state = { - spec: undefined, - specUrl: url, - dropdownOpen: false, - cors, - }; - } - - handleUploadFile = (spec: object) => { - this.setState({ - spec, - specUrl: '', - }); - }; - - handleChange = (url: string) => { - if (url === NEW_VERSION_PETSTORE) { - this.setState({ cors: false }); - 0; - } - this.setState({ - specUrl: url, - }); - window.history.pushState( - undefined, - '', - updateQueryStringParameter(location.search, 'url', url), - ); - }; - - toggleCors = (e: React.ChangeEvent) => { - const cors = e.currentTarget.checked; - this.setState({ - cors, - }); - window.history.pushState( - undefined, - '', - updateQueryStringParameter(location.search, 'nocors', cors ? undefined : ''), - ); - }; - - render() { - const { specUrl, cors } = this.state; - let proxiedUrl = specUrl; - if (specUrl !== DEFAULT_SPEC) { - proxiedUrl = cors - ? 'https://cors.redoc.ly/' + new URL(specUrl, window.location.href).href - : specUrl; - } - return ( - <> - - - - - - - - - - - - -

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�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�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 LaW%}$ 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 = useRef(null); - - const handleClick = () => { - if (hiddenFileInput && hiddenFileInput.current) { - hiddenFileInput.current.click(); - } - }; - - const uploadFile = (event: ChangeEvent) => { - const file = (event.target as HTMLInputElement).files![0]; - const reader = new FileReader(); - reader.onload = () => { - props.onUpload(yaml.load(reader.result)); - }; - reader.readAsText(file); - }; - - return ( - - - - - ); -} - -export default FileInput; diff --git a/demo/index.html b/demo/index.html deleted file mode 100644 index 8d751a6b..00000000 --- a/demo/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - Redoc Interactive Demo - - - - - - - - - - - - - -