swagger/v1.yaml
---
openapi: 3.0.1
info:
title: API V1
version: v1
components:
schemas:
error_response:
type: object
properties:
errors:
type: array
items:
type: object
properties:
title:
type: string
detail:
type: string
source:
type: object
required:
- detail
required:
- errors
customer:
type: object
properties:
data:
type: object
properties:
id:
type: string
example: '1'
type:
type: string
example: customer
attributes:
type: object
properties:
id:
type: integer
example: 1
enterprise_id:
type: integer
example: 2
first_name:
type: string
nullable: true
example: Alice
last_name:
type: string
nullable: true
example: Springs
code:
type: string
nullable: true
example: BUYER1
email:
type: string
example: alice@example.com
allow_charges:
type: boolean
example: false
tags:
type: array
items:
type: string
example:
- staff
- discount
terms_and_conditions_accepted_at:
type: string
format: date-time
nullable: true
example: '2022-03-12T15:55:00.000+11:00'
billing_address:
type: object
nullable: true
example:
shipping_address:
type: object
nullable: true
example:
phone: 0404 333 222 111
latitude: -37.8173751
longitude: 144.964803195704
first_name: Alice
last_name: Springs
street_address_1: 1 Flinders Street
street_address_2: ''
postal_code: '1234'
locality: Melbourne
region:
code: Vic
name: Victoria
country:
code: AU
name: Australia
required:
- id
- enterprise_id
- first_name
- last_name
- code
- email
- allow_charges
- tags
- terms_and_conditions_accepted_at
- billing_address
- shipping_address
relationships:
type: object
properties:
enterprise:
type: object
properties:
data:
type: object
properties:
id:
type: string
type:
type: string
example: enterprise
links:
type: object
properties:
related:
type: string
meta:
type: object
links:
type: object
required:
- data
customers_collection:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
example: '1'
type:
type: string
example: customer
attributes:
type: object
properties:
id:
type: integer
example: 1
enterprise_id:
type: integer
example: 2
first_name:
type: string
nullable: true
example: Alice
last_name:
type: string
nullable: true
example: Springs
code:
type: string
nullable: true
example: BUYER1
email:
type: string
example: alice@example.com
allow_charges:
type: boolean
example: false
tags:
type: array
items:
type: string
example:
- staff
- discount
terms_and_conditions_accepted_at:
type: string
format: date-time
nullable: true
example: '2022-03-12T15:55:00.000+11:00'
billing_address:
type: object
nullable: true
example:
shipping_address:
type: object
nullable: true
example:
phone: 0404 333 222 111
latitude: -37.8173751
longitude: 144.964803195704
first_name: Alice
last_name: Springs
street_address_1: 1 Flinders Street
street_address_2: ''
postal_code: '1234'
locality: Melbourne
region:
code: Vic
name: Victoria
country:
code: AU
name: Australia
balance:
type: number
format: double
required:
- id
- enterprise_id
- first_name
- last_name
- code
- email
- allow_charges
- tags
- terms_and_conditions_accepted_at
- billing_address
- shipping_address
relationships:
type: object
properties:
enterprise:
type: object
properties:
data:
type: object
properties:
id:
type: string
type:
type: string
example: enterprise
links:
type: object
properties:
related:
type: string
meta:
type: object
properties:
pagination:
type: object
properties:
results:
type: integer
example: 250
pages:
type: integer
example: 5
page:
type: integer
example: 2
per_page:
type: integer
example: 50
required:
- pagination
links:
type: object
properties:
self:
type: string
first:
type: string
prev:
type: string
nullable: true
next:
type: string
nullable: true
last:
type: string
required:
- data
- meta
- links
securitySchemes:
api_key_header:
type: apiKey
name: X-Api-Token
in: header
description: Authenticates via API key passed in specified header
api_key_param:
type: apiKey
name: token
in: query
description: Authenticates via API key passed in specified query param
session:
type: apiKey
name: _ofn_session_id
in: cookie
description: Authenticates using the current user's session if logged in
paths:
"/api/v1/customers":
get:
summary: List customers
tags:
- Customers
parameters:
- name: enterprise_id
in: query
schema:
type: string
- name: extra_fields[customer]
in: query
example: balance
description: Add extra fields to each customer
schema:
type: string
responses:
'200':
description: Customers list
content:
application/json:
schema:
"$ref": "#/components/schemas/customers_collection"
post:
summary: Create customer
tags:
- Customers
parameters: []
responses:
'201':
description: Example customer created
content:
application/json:
schema:
"$ref": "#/components/schemas/customer"
'422':
description: Unprocessable entity
content:
application/json:
schema:
"$ref": "#/components/schemas/error_response"
requestBody:
content:
application/json:
schema:
type: object
properties:
enterprise_id:
type: integer
example: 2
first_name:
type: string
nullable: true
example: Alice
last_name:
type: string
nullable: true
example: Springs
code:
type: string
nullable: true
example: BUYER1
email:
type: string
example: alice@example.com
tags:
type: array
items:
type: string
example:
- staff
- discount
billing_address:
type: object
nullable: true
example:
shipping_address:
type: object
nullable: true
example:
phone: 0404 333 222 111
latitude: -37.8173751
longitude: 144.964803195704
first_name: Alice
last_name: Springs
street_address_1: 1 Flinders Street
street_address_2: ''
postal_code: '1234'
locality: Melbourne
region:
code: Vic
name: Victoria
country:
code: AU
name: Australia
required:
- enterprise_id
- email
"/api/v1/customers/{id}":
get:
summary: Show customer
tags:
- Customers
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Customer
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
id:
type: string
example: '1'
type:
type: string
example: customer
attributes:
type: object
properties:
id:
type: integer
example: 1
enterprise_id:
type: integer
example: 2
first_name:
type: string
nullable: true
example: Alice
last_name:
type: string
nullable: true
example: Springs
code:
type: string
nullable: true
example: BUYER1
email:
type: string
example: alice@example.com
allow_charges:
type: boolean
example: false
tags:
type: array
items:
type: string
example:
- staff
- discount
terms_and_conditions_accepted_at:
type: string
format: date-time
nullable: true
example: '2022-03-12T15:55:00.000+11:00'
billing_address:
type: object
nullable: true
example:
shipping_address:
type: object
nullable: true
example:
phone: 0404 333 222 111
latitude: -37.8173751
longitude: 144.964803195704
first_name: Alice
last_name: Springs
street_address_1: 1 Flinders Street
street_address_2: ''
postal_code: '1234'
locality: Melbourne
region:
code: Vic
name: Victoria
country:
code: AU
name: Australia
balance:
type: number
format: double
required:
- id
- enterprise_id
- first_name
- last_name
- code
- email
- allow_charges
- tags
- terms_and_conditions_accepted_at
- billing_address
- shipping_address
- balance
relationships:
type: object
properties:
enterprise:
type: object
properties:
data:
type: object
properties:
id:
type: string
type:
type: string
example: enterprise
links:
type: object
properties:
related:
type: string
meta:
type: object
links:
type: object
required:
- data
'404':
description: Not found
content:
application/json:
schema:
"$ref": "#/components/schemas/error_response"
'401':
description: Unauthorized
content:
application/json:
schema:
"$ref": "#/components/schemas/error_response"
put:
summary: Update customer
tags:
- Customers
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Customer updated
content:
application/json:
schema:
"$ref": "#/components/schemas/customer"
'422':
description: Unprocessable entity
content:
application/json:
schema:
"$ref": "#/components/schemas/error_response"
requestBody:
content:
application/json:
schema:
type: object
properties:
enterprise_id:
type: integer
example: 2
first_name:
type: string
nullable: true
example: Alice
last_name:
type: string
nullable: true
example: Springs
code:
type: string
nullable: true
example: BUYER1
email:
type: string
example: alice@example.com
tags:
type: array
items:
type: string
example:
- staff
- discount
billing_address:
type: object
nullable: true
example:
shipping_address:
type: object
nullable: true
example:
phone: 0404 333 222 111
latitude: -37.8173751
longitude: 144.964803195704
first_name: Alice
last_name: Springs
street_address_1: 1 Flinders Street
street_address_2: ''
postal_code: '1234'
locality: Melbourne
region:
code: Vic
name: Victoria
country:
code: AU
name: Australia
required:
- enterprise_id
- email
delete:
summary: Delete customer
tags:
- Customers
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Customer deleted
content:
application/json:
schema:
"$ref": "#/components/schemas/customer"
"/api/v1/enterprises/{enterprise_id}/customers":
get:
summary: List customers of an enterprise
tags:
- Customers
- Enterprises
parameters:
- name: enterprise_id
in: path
required: true
schema:
type: string
responses:
'200':
description: Customers list
content:
application/json:
schema:
"$ref": "#/components/schemas/customers_collection"
servers:
- url: "/"